使用bouncycastle库来制作证书(包括一个自签名证书和为他人签发证书)。
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>1.54</version> </dependency>
import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.math.BigInteger; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; import org.bouncycastle.cert.X509v3CertificateBuilder; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; public class CertMakeDemo { public static void main(String[] args) throws Exception { X500Name subject = new X500Name("CN=root, O=root, OU=root"); KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA"); gen.initialize(1024); KeyPair pair = gen.generateKeyPair(); X509Certificate certificate = signerSelf(subject, pair); System.out.println("证书:" + certificate); KeyStore pkcs12 = KeyStore.getInstance("PKCS12"); pkcs12.load(null, null); pkcs12.setKeyEntry("root", pair.getPrivate(), "123456".toCharArray(), new Certificate[] { certificate }); for (Enumeration<String> e = pkcs12.aliases(); e.hasMoreElements();) { String alias = e.nextElement(); System.out.println(pkcs12.getCertificateChain(alias)); System.out.println(pkcs12.getKey(alias, "123456".toCharArray())); } OutputStream out = new FileOutputStream("f:/temp/root.pfx"); pkcs12.store(out, "123456".toCharArray()); out.close(); //root为张三签发证书 X500Name zsSubject = new X500Name("CN=张三, O=张三, OU=张三"); gen = KeyPairGenerator.getInstance("RSA"); gen.initialize(1024); KeyPair zsKeypair = gen.generateKeyPair(); X509Certificate zsCertificate = signer(zsSubject, zsKeypair.getPublic(), certificate, pair.getPrivate()); System.out.println("张三证书:" + zsCertificate); out = new FileOutputStream("f:/temp/zhangsan.cer"); out.write(zsCertificate.getEncoded()); out.close(); } public static X509Certificate signer(X500Name subject, PublicKey subjectPublicKey,// X509Certificate issuerCert, PrivateKey issuerPrivateKey) throws Exception { X500Name issuer = X500Name.getInstance(issuerCert.getSubjectX500Principal().getEncoded()); String signatureAlgorithm = issuerCert.getSigAlgName(); return signer(subject, subjectPublicKey, issuer, issuerPrivateKey, signatureAlgorithm); } public static X509Certificate signerSelf(X500Name subject, KeyPair pair) throws Exception { String signatureAlgorithm = "SHA1With" + pair.getPrivate().getAlgorithm(); return signer(subject, pair.getPublic(), subject, pair.getPrivate(), signatureAlgorithm); } public static X509Certificate signer(X500Name subject, PublicKey subjectPublicKey,// X500Name issuer, PrivateKey issuerPrivateKey, String signatureAlgorithm) throws Exception { BigInteger sn = new BigInteger(new SimpleDateFormat("yyyyMMdd").format(new Date())); Date notBefore = new Date(); Date notAfter = new Date(notBefore.getTime() + 365L * 24 * 60 * 60 * 1000); SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfo.getInstance(subjectPublicKey.getEncoded()); ContentSigner signer = new JcaContentSignerBuilder(signatureAlgorithm).build(issuerPrivateKey); X509v3CertificateBuilder builder = new X509v3CertificateBuilder(// issuer, sn, notBefore, notAfter, subject, publicKeyInfo); byte[] certBytes = builder.build(signer).getEncoded(); X509Certificate certificate = (X509Certificate) CertificateFactory.getInstance("X509")// .generateCertificate(new ByteArrayInputStream(certBytes)); return certificate; } }
相关推荐
贵鹤证书制作打印助手(证书打印系统)是一款专业智能证书制作生成打印工具,用户直接在界面输入相应内容,设整好格式,证书即可智能生成。可以添加证书编号、附加内容、二维码等。支持EXCEL表格,可将EXCEL表格与软件...
RSA证书制作工具,导出自定义加解密证书信息
1.证书申请 2.证书审核 3.证书制作
pfx证书制作工具
诺基亚证书制作软件Safecert 诺基亚证书制作软件Safecert
数字证书制作工具简单的操作说明。如有疑问QQ,EMAIL联系我。
塞班证书制作工具 自己动手就可以做了
fiddlercertmaker(Fiddler证书制作).exe
S60 手机证书 制作软件(自己动手不用申请) 自己搞,秒做!
S60V3V5证书制作及签名工具合集FireCer 可方便申请V3 及V5证书,快速签名
HTTPS证书制作配置全记录,自己总结。
1.证书制作操作记录 通过openssl制作自签三级证书,即根证书、中间证书、和服务证书。 2.添加自签证书为可信证书 3.1 win添加自签证书为可信证书 3.2 centos添加自签证书为可信证书 3.3 JDK添加自签证书为...
证书创建工具 Makecert_exe:制作证书。 证书私钥提取工具getprvk.exe:从钥包文件,如pfx等中提取私钥存为pvk文件。 文件加密解密工具zxfutl.exe:使用证书和私钥对文件进行加密解密,封包解包。
数字证书 数字证书制作工具 codesigning codesigningx86 数字证书 数字证书制作工具 codesigning codesigningx86
个人数字证书制作工具,自定义制作个人数字证书,内含编译好的程序和VB源代码,可制作非官方验证的个人数字证书,系统安装个人数字证书后,只要给自己的程序进行签名可免除系统对非验证的程序的检测,直接通过杀软等...
制作符合国际标准的数字证书和应用数字证书进行文件保密的工具集合,还有用于代码签名的辅助工具,适用于个人或小企业、小团体内部使用。短小精简,绿色免安装,是学习、掌握数字证书应用的最佳实践工具。
数字证书的签名,证书的制作与查看,这是一个用C#编写 的程序代码
https双向证书制作详细制作步骤
ca证书制作步骤ca证书制作步骤ca证书制作步骤
证书管理系统,证书制作、删除、管理等,比较实用