2015-04-29 118 views
2

java中如何生成此命令的模擬輸出?Java生成安全證書

openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout server.key -out cert.pem 

我接下來做

KeyPairGenerator gen = KeyPairGenerator.getInstance(keyAlgo); 
SecureRandom random = new SecureRandom(); 
gen.initialize(keyLength, random); 
keyPair = gen.genKeyPair(); 
PublicKey pubk = keyPair.getPublic(); 
PrivateKey prvk = keyPair.getPrivate(); 

但結果我收到另一長度公鑰和私鑰。

回答

1

下面是一個例子:

Date validityBeginDate = new Date(System.currentTimeMillis()); 
Date validityEndDate = new Date(System.currentTimeMillis() + 365 * 24 * 60 * 60 * 1000); //1 year from now 

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC"); 
keyPairGenerator.initialize(4096, new SecureRandom()); 

KeyPair keyPair = keyPairGenerator.generateKeyPair(); 

X509V1CertificateGenerator certGen = new X509V1CertificateGenerator(); 
X500Principal dnName = new X500Principal("CN=John Doe"); 

certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis())); 
certGen.setSubjectDN(dnName); 
certGen.setIssuerDN(dnName); 
certGen.setNotBefore(validityBeginDate); 
certGen.setNotAfter(validityEndDate); 
certGen.setPublicKey(keyPair.getPublic()); 
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption"); 

X509Certificate cert = certGen.generate(keyPair.getPrivate(), "BC"); 

使用PEMWriter輸出你的PEM文件。

+1

根據[文檔](https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#importlimits),如果您安裝了Unlimited,則不存在RSA密鑰大小限制 - 強度策略文件。 – EJP

+0

在這種情況下,它也應該使用4096位。我相應地更改我的代碼 – Peanut

+0

請注意,此示例使用BouncyCastle加密提供程序庫。 – EpicPandaForce