2012-03-20 155 views
5

我正在尋找一個實用程序類,可以爲測試目的生成隨機證書字符串。任何想法,如果有一個已經實施?生成隨機證書

回答

4

內置的Java庫X500使用證書比產生解析證書更適合於。你可能會找到一種方法去做你想做的事情,但它幾乎肯定會是一團糟,並且在一個受保護的API中(sun.security.*)。

我建議你加入Bouncy Castle圖書館(Apache許可證)。它有一個名爲X509V3CertificateGenerator的類,您可以使用它來設置證書的字段(發行者,主題,到期日期等)。

然後,您應該能夠使用PEMWriter類從中獲取PEM字符串。

+5

請注意'X509V3CertificateGenerator'已被棄用(至少在Bouncy Castle 1.47中)。他們建議使用'X509v3CertificateBuilder'(不是在'bcprov'中,而是在'bcpkix' jar中)。 – martijno 2012-08-14 10:24:04

+0

現在它在'bcmail'罐子裏 – KeksArmee 2015-11-21 22:56:35

+0

@KeksArmee:它仍然在'bcpkix'中。 – jackyalcine 2016-07-20 23:25:41

3

要添加到martijno給出的解決方案,

而不是寫你自己的內容簽名,JCAContentSigner可以用來避免映射到AlgorithmIdentifier中(即OID)。

JcaContentSignerBuilder採用定義爲here的算法名稱。

X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(issuer, serialNumber, startDate, expiryDate, subject, SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded())); 
JcaContentSignerBuilder builder = new JcaContentSignerBuilder("SHA256withRSA"); 
ContentSigner signer = builder.build(keyPair.getPrivate()); 

byte[] certBytes = certBuilder.build(signer).getEncoded(); 
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 
X509Certificate certificate = (X509Certificate)certificateFactory.generateCertificate(new ByteArrayInputStream(certBytes)); 
+0

我是否正確,如果這不是一個自簽名證書我只是用私鑰替換私鑰? – maxbit89 2017-06-30 13:47:52