java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式

java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.math.BigInteger;importjava.security.InvalidKeyException;im…

大家好,又见面了,我是你们的朋友全栈君。

importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.math.BigInteger;importjava.security.InvalidKeyException;importjava.security.Key;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.KeyStore;importjava.security.KeyStoreException;importjava.security.NoSuchAlgorithmException;importjava.security.NoSuchProviderException;importjava.security.SecureRandom;importjava.security.Security;importjava.security.SignatureException;importjava.security.cert.CertificateEncodingException;importjava.security.cert.CertificateException;importjava.security.cert.CertificateFactory;importjava.security.cert.X509Certificate;importjava.util.Date;importjava.util.Enumeration;importorg.bouncycastle.asn1.x509.X509Name;importorg.bouncycastle.jce.X509V3CertificateGenerator;importorg.bouncycastle.jce.provider.BouncyCastleProvider;importsun.misc.BASE64Encoder;public classDataCertCreate {private String path = “D:/”;/*** 公钥方法*/

static{

Security.addProvider(newBouncyCastleProvider());

}/*** 产生数字公钥证书 String[]

* info长度为9,分别是{cn,ou,o,c,l,st,starttime,endtime,serialnumber}

*

*@throwsSignatureException

*@throwsSecurityException

*@throwsNoSuchProviderException

*@throwsInvalidKeyException*/

publicX509Certificate generateCert(String[] info, KeyPair keyPair_root, KeyPair keyPair_user)throwsInvalidKeyException, NoSuchProviderException, SecurityException, SignatureException {

X509V3CertificateGenerator certGen= newX509V3CertificateGenerator();

X509Certificate cert= null;

certGen.setSerialNumber(new BigInteger(info[8]));

certGen.setIssuerDN(new X509Name(“CN=huahua, OU=hnu, O=university , C=china”));

certGen.setNotBefore(new Date(Long.parseLong(info[6])));

certGen.setNotAfter(new Date(Long.parseLong(info[7])));

certGen.setSubjectDN(new X509Name(“C=” + info[0] + “,OU=” + info[1] + “,O=” + info[2] + “,C=” + info[3] + “,L=”

+ info[4] + “,ST=” + info[3]));

certGen.setPublicKey(keyPair_user.getPublic());

certGen.setSignatureAlgorithm(“SHA1WithRSA”);

cert= certGen.generateX509Certificate(keyPair_root.getPrivate(), “BC”);returncert;

}/*** 私钥方法*/

private String KEYSTORE_PASSWORD = “2078888”;/*** 创建空的jks文件 String[]

* info长度为9,分别是{cn,ou,o,c,l,st,starttime,endtime,serialnumber}*/

public voidgenerateJKS(String[] info) {try{

KeyStore keyStore= KeyStore.getInstance(“jks”);

keyStore.load(null, null);

keyStore.store(new FileOutputStream(“D:/” + info[0] + “.jks”), KEYSTORE_PASSWORD.toCharArray());

}catch (KeyStoreException | NoSuchAlgorithmException | CertificateException |IOException e) {

e.printStackTrace();

}

}/*** 使用空的jks创建自己的jks String[]

* info长度为9,分别是{cn,ou,o,c,l,st,starttime,endtime,serialnumber}*/

public voidstoreJKS(String[] info, KeyPair keyPair_root, KeyPair keyPair_user) {

KeyStore keyStore;try{//use exited jks file

keyStore = KeyStore.getInstance(“JKS”);

keyStore.load(new FileInputStream(“D:/” + info[0] + “.jks”), KEYSTORE_PASSWORD.toCharArray());//generate user’s keystore by info[8] —–keypair

X509V3CertificateGenerator certGen = newX509V3CertificateGenerator();

certGen.setSerialNumber(new BigInteger(info[8]));

certGen.setIssuerDN(new X509Name(“CN=huahua, OU=hnu, O=university , C=china”));

certGen.setNotBefore(new Date(Long.parseLong(info[6])));

certGen.setNotAfter(new Date(Long.parseLong(info[7])));

certGen.setSubjectDN(new X509Name(“C=” + info[0] + “,OU=” + info[1] + “,O=” + info[2] + “,C=” + info[3]+ “,L=” + info[4] + “,ST=” + info[3]));

certGen.setPublicKey(keyPair_user.getPublic());

certGen.setSignatureAlgorithm(“SHA1WithRSA”);

X509Certificate cert= null;

Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());

cert= certGen.generateX509Certificate(keyPair_root.getPrivate(), “BC”);

X509Certificate[] chain= new X509Certificate[1];

chain[0] =cert;

keyStore.setKeyEntry(“mykey”, keyPair_user.getPrivate(), KEYSTORE_PASSWORD.toCharArray(), chain);

keyStore.setCertificateEntry(“single_cert”, cert);

keyStore.store(new FileOutputStream(“D:/” + info[0] + “.jks”), KEYSTORE_PASSWORD.toCharArray());

}catch(Exception e) {

e.printStackTrace();

}

}/*** 公私钥公共方法*/

/*** 根据seed产生密钥对

*

*@paramseed

*@return*@throwsNoSuchAlgorithmException*/

public KeyPair generateKeyPair(int seed) throwsNoSuchAlgorithmException {

KeyPairGenerator kpg= KeyPairGenerator.getInstance(“RSA”);

kpg.initialize(1024, new SecureRandom(new byte[seed]));

KeyPair keyPair=kpg.generateKeyPair();returnkeyPair;

}public static final String PKCS12 = “PKCS12”;/*** 转换成pfx格式

*

*@paraminfo*/

publicBoolean toPFX(String[] info) {try{

String pfx_keystore_file= “D:/” + info[0] + “.pfx”;

String jkx_keystore_file= “D:/” + info[0] + “.jks”;

KeyStore inputKeyStore= KeyStore.getInstance(“JKS”);

FileInputStream fis= newFileInputStream(jkx_keystore_file);char[] nPassword = null;if ((KEYSTORE_PASSWORD == null) || KEYSTORE_PASSWORD.trim().equals(“”)) {

nPassword= null;

}else{

nPassword=KEYSTORE_PASSWORD.toCharArray();

}

inputKeyStore.load(fis, nPassword);

fis.close();

KeyStore outputKeyStore= KeyStore.getInstance(“PKCS12”);

outputKeyStore.load(null, KEYSTORE_PASSWORD.toCharArray());

Enumeration enums=inputKeyStore.aliases();while(enums.hasMoreElements()) {

String keyAlias=(String) enums.nextElement();

System.out.println(“alias=[” + keyAlias + “]”);if(inputKeyStore.isKeyEntry(keyAlias)) {

Key key=inputKeyStore.getKey(keyAlias, nPassword);

java.security.cert.Certificate[] certChain=inputKeyStore.getCertificateChain(keyAlias);

outputKeyStore.setKeyEntry(keyAlias, key, KEYSTORE_PASSWORD.toCharArray(), certChain);

}

}

FileOutputStream out= newFileOutputStream(pfx_keystore_file);

outputKeyStore.store(out, nPassword);

out.close();return true;

}catch(Exception e) {

e.printStackTrace();

System.out.println(“toPFX :” +e.getMessage());return false;

}

}public booleancreatePublicKey(String[] info) {try{

KeyPair keyPair_root= generateKeyPair(10);

KeyPair keyPair_user= generateKeyPair(100);

X509Certificate cert=generateCert(info, keyPair_root, keyPair_user);

String certPath= path + info[0] + “.cer”;

FileOutputStream fos= newFileOutputStream(certPath);

BASE64Encoder encoder= newBASE64Encoder();

String string=encoder.encode(cert.getEncoded());

System.out.println(string);

fos.write(cert.getEncoded());

fos.close();return true;

}catch(Exception e) {

e.printStackTrace();

System.out.println(“public key :” +e.getMessage());return false;

}

}public booleancreatePublicKeyBYDecode(String[] info) {try{

KeyPair keyPair_root= generateKeyPair(10);

KeyPair keyPair_user= generateKeyPair(100);

X509Certificate cert=generateCert(info, keyPair_root, keyPair_user);

String certPath= path + info[0] + “_base.cer”;

FileWriter wr= new java.io.FileWriter(newFile(certPath));

String encode= newBASE64Encoder().encode(cert.getEncoded());

String strCertificate= “—–BEGIN CERTIFICATE—–\r\n” + encode + “\r\n—–END CERTIFICATE—–\r\n”;

wr.write(strCertificate);//给证书编码

wr.flush();

wr.close();return true;

}catch(Exception e) {

e.printStackTrace();

System.out.println(“public key :” +e.getMessage());return false;

}

}publicX509Certificate fromString(String cert) {try{

CertificateFactory certificateFactory= CertificateFactory.getInstance(“X.509”);

String strCertificate= “—–BEGIN CERTIFICATE—–\n” + cert + “\n—–END CERTIFICATE—–\n”;

java.io.ByteArrayInputStream streamCertificate= newjava.io.ByteArrayInputStream(

strCertificate.getBytes(“UTF-8”));return(X509Certificate) certificateFactory.generateCertificate(streamCertificate);

}catch(Exception ex) {

System.out.println(ex.getMessage());

}return null;

}public booleancreatePrivateKey(String[] info) {try{

KeyPair keyPair_root= generateKeyPair(10);

KeyPair keyPair_user= generateKeyPair(100);

generateJKS(info);

storeJKS(info, keyPair_root, keyPair_user);return true;

}catch(NoSuchAlgorithmException e) {

e.printStackTrace();

System.out.println(“private key :” +e.getMessage());return false;

}

}public static void main(String[] args) throwsNoSuchAlgorithmException, InvalidKeyException,

NoSuchProviderException, SecurityException, SignatureException, CertificateEncodingException, IOException {

DataCertCreate dataCertCreate= newDataCertCreate();

String[] info= { “huahua_user”, “hnu”, “university”, “china”, “hunan”, “changsha”, “111111”, “11111111”, “1”};//生成公钥

boolean createPublicKey =dataCertCreate.createPublicKey(info);

System.out.println(“PUBLIC KEY CREATE OK, result==” +createPublicKey);boolean createPublicKeyBYDecode =dataCertCreate.createPublicKeyBYDecode(info);

System.out.println(“PUBLIC KEY BY BASE64Encoder CREATE OK, result==” +createPublicKeyBYDecode);boolean createPrivateKey =dataCertCreate.createPrivateKey(info);

System.out.println(“PRIVATE KEY CREATE OK, result==” +createPrivateKey);

Boolean pfx=dataCertCreate.toPFX(info);

System.out.println(“transToPFX OK, result==” +pfx);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139701.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android studio 更换darcula主题中的字体颜色以及常用主题「建议收藏」

    android studio 更换darcula主题中的字体颜色以及常用主题「建议收藏」更换主题的网站:http://www.ideacolorthemes.org/home/androidstudio中更换默认主题为darcula的教程网上很多,但是默认darcula主题中的colors&fonts不太喜欢,也感觉比较伤眼睛。国内百度了半天也没有解决方案,无奈翻墙找谷歌发现了这个网站。是在stackoverflow里发现的。设置方法很简单:

    2022年6月27日
    39
  • DirectX修复工具在线修复版

    DirectX修复工具在线修复版DirectX修复工具最新版:DirectXRepairV3.9在线修复版NEW!版本号:V3.9.0.29371大小:971KB/7z格式压缩,2.63MB/ZIP格式压缩,5.62MB/解压后其他版本:标准版增强版MD5校验码(校验工具下载):DirectXRepair.exe/eeab9900cc4c10da8e6b786e5f79d09c…

    2022年6月13日
    45
  • labelme实例分割标注_手机视频分割软件

    labelme实例分割标注_手机视频分割软件Labelme是一款经典的标注工具,支持目标检测、语义分割、实例分割等任务。今天针对分割任务的数据标注进行简单的介绍。开源项目地址:https://github.com/wkentaro/labelme

    2025年10月30日
    5
  • 超详细kali linux 设置固定IP地址步骤

    超详细kali linux 设置固定IP地址步骤kalilinux设置固定IP地址二,设置虚拟网络    &…

    2022年5月9日
    722
  • 文华期货程序化交易软件_文华财经代码编写

    文华期货程序化交易软件_文华财经代码编写一、目前期货程序化现状:由于有免费的CTP接口,期货程序化交易目前比较普遍,很多人都尝试过在文华财经、金字塔之类的软件上回测和编写实盘策略。期货程序化交易有很多优点:程序会按照设计自动执行,不受任何其它因素干扰,设计正确的请假下不会出错。借助于程序,交易速度更快,远远超过人工下单的速度。节省人工成本,一个策略可以部署多个机器人,特别当前期货存在夜盘的情况下,耗费非常大的人力…

    2022年10月8日
    3
  • 图像尺度空间理论_16位灰度图像

    图像尺度空间理论_16位灰度图像《SIFT原理与源码分析》系列文章索引:http://blog.csdn.net/xiaowei_cqu/article/details/8069548尺度空间理论自然界中的物体随着观测尺度不同有不同的表现形态。例如我们形容建筑物用“米”,观测分子、原子等用“纳米”。更形象的例子比如Google地图,滑动鼠标轮可以改变观测地图的尺度,看到的地图绘制也不同;还有电影中的拉

    2022年10月9日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号