2011-03-06 89 views
1

Java的keytool是否能夠導出帶有私鑰的X.509證書?Java keytool:將私鑰插入到X.509證書中

我正在考慮一個用戶生成證書(使用私鑰)並將其提供給簽名工具的方案。簽名工具使用證書中的私鑰來簽署目標文件。最後,將私鑰從證書中刪除,並將證書附加到目標文件以進行分發。

+1

X509證書沒有私鑰。 – 2011-03-06 01:02:33

+0

這也是我最初的理解。但事實證明,.NET有一個證書創建工具(http://msdn.microsoft.com/en-us/library/bfsktky3(v=vs.80).aspx),該工具可以選擇包含私鑰X.509證書。 – Ranjit 2011-03-06 01:31:51

回答

2

我還無法評論,因此我將使用此表格: 通常使用PKCS#12 http://en.wikipedia.org/wiki/PKCS#12來存儲具有其私鑰的證書。此外,可以將公鑰/私鑰對存儲在PCKS#8容器中,並單獨運送證書。

如果你有興趣,我想我有一些PKCS#12存儲的Java代碼示例。

此外,開源Java認證中心EJBCA(http://www.ejbca.org/)是一個很好的示例源代碼。

+0

由於我仍然無法評論,我想添加一些內容:您引用的證書創建工具不會創建包含私鑰的x.509證書,但是,它會創建一個專有的未受保護的* .snk文件,其中包含證書和私鑰。他們也推薦使用容器來存儲證書和密鑰。 – BatteryBackupUnit 2011-04-04 16:36:30

+0

明白了。閱讀PKCS#12讓我意識到這將是密鑰庫文件(例如,Java密鑰庫)所使用的格式,它允許將私鑰和證書對存儲在同一文件中。感謝您的答覆。我將在您之前的回覆中引用的網站上詳細瞭解此信息。名爲PEM的 – Ranjit 2011-04-05 18:57:33

1

生成的私鑰永遠不會被他人用於任何目的。 簽名我知道的工具將使用他們自己的私鑰生成他們的簽名以證明您的公鑰。對於例如您使用keytool生成密鑰對並將CSR提交給CA. CA將使用他們自己的pvt密鑰在您的證書上簽名。

+0

,包含私鑰和公鑰的文件 – 2012-11-23 23:32:42

1

keytool(命令行可執行文件)沒有導出私鑰的選項。但是您可以使用JSA-API以編程方式執行它(儘管如此,還沒有嘗試過)。

1

密鑰及其簽名證書通常存儲在密鑰庫容器(如PKCS12或Java的JKS)中。也可以將證書和密鑰提取到PEM格式文件中,以便在諸如Apache HTTPD之類的應用程序中使用。

要從JKS文件中提取證書和密鑰有必要使用OpenSSL提取證書之前,將其轉換爲PKCS12格式文件:

keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pkcs12 -deststoretype pkcs12 
openssl pkcs12 -in keystore.pkcs12 -out mycert.crt -nokeys 
openssl pkcs12 -in keystore.pkcs12 -out mykey.key -nocerts