簡體   English   中英

如何在Keystore上創建密鑰庫的證書?

[英]How to Create a Certificate on keystore to my KeyPair?

如何為我的KeyPair創建X509Certificate? (我的班級已經擁有KeyPair,我需要創建一個證書,該證書將保存我的公鑰,然后將其存儲在密鑰庫中)。

我希望有一個X509Certificate構造函數能夠接收我的公鑰,然后通過keystore.setEntry(pvtkey,cert)存儲它,但我沒有發現任何有用的關聯新證書和我的密鑰對...

任何想法?

編輯:我也嘗試將證書鏈傳遞為null但它不起作用,它看起來像http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=5866fda73ac1258fcfebef9c3234?bug_id=4906869上報告的錯誤

謝謝!

Oracle Java中沒有用於創建X509Certificate的Java類。 你要么必須

  1. 使用keytool程序(簡單,但它不是java),或
  2. 編寫自己的自定義代碼(硬),
  3. 使用像bouncycastle這樣的第三方庫(相對簡單)。

編輯:

由於這些條目可以保留一段時間,我應該補充一點,上述語句適用於Java 7及更早版本。

以下是解決方案如何生成自簽名X509Certificate: 鏈接的相關問題

嘗試以這種方式使用BouncyCastle類:

// generate a key pair
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC");
keyPairGenerator.initialize(4096, new SecureRandom());
KeyPair keyPair = keyPairGenerator.generateKeyPair();

// build a certificate generator
X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
X500Principal dnName = new X500Principal("cn=Example_CN");

// add some options
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
certGen.setSubjectDN(new X509Name("dc=Example_Name"));
certGen.setIssuerDN(dnName); // use the same
// yesterday
certGen.setNotBefore(new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000));
// in 2 years
certGen.setNotAfter(new Date(System.currentTimeMillis() + 2 * 365 * 24 * 60 * 60 * 1000));
certGen.setPublicKey(keyPair.getPublic());
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
certGen.addExtension(X509Extensions.ExtendedKeyUsage, true, new ExtendedKeyUsage(KeyPurposeId.id_kp_timeStamping));

// finally, sign the certificate with the private key of the same KeyPair
X509Certificate cert = certGen.generate(keyPair.getPrivate(), "BC");

請記住添加安全提供程序:

Security.addProvider(new BouncyCastleProvider());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM