簡體   English   中英

如何在Java 1.6中使用ECC私鑰?

[英]How to use ECC private key with Java 1.6?

我創建了新的JKS密鑰庫,其中包含TrustedCertEntry和PrivateKeyEntry。 兩者均使用ECC創建(簽名算法名稱:SHA384withECDSA)。 只能使用支持ECC的Java 1.7 keytool進行導入。 在運行時,我使用不支持ECC的Java 1.6。

在我的代碼中,我定義了:

System.setProperty("javax.net.ssl.keyStore", "c:\mykey.ks");
System.setProperty("javax.net.ssl.keyStorePassword","abcde");

目前我正在:

org.apache.axis2.AxisFault:無法解碼base64數據:null

無論如何,可以將JKS與Java 1.6一起使用嗎?

基本上,要使ECC在Java 6中可用,要做的就是添加一個支持ECC的附加提供程序。 不付錢,您有兩種選擇:

  1. Sun PKCS#11提供程序
  2. 彈性的城堡提供者

對於選項1,您需要一個本機PKCS#11庫,我認為您沒有。 無論如何,選項2可能是更好的選擇,因為PKCS#11實際上用於智能卡或HSM中的密鑰。 但是,僅出於記錄目的,如果有人願意這樣做,以下是如何執行的描述(NSS部分無關緊要): 如何從NSS DB導出ECC密鑰和證書並導入JKS密鑰庫和Oracle Wallet

選項2要求密鑰庫是Bouncy Castle提供的類型之一(BKS或UBER),並且需要安裝Bouncy Castle提供程序。

對於提供程序安裝,請遵循以下指示信息: 提供程序安裝 可能有必要在標准SSL提供程序(com.sun.net.ssl.internal.ssl.Provider) 之前添加BC提供程序,但是我不確定。

之后,可以使用之前使用過的keytool命令將密鑰導入到BKS密鑰庫中,並進行以下修改:

  • -storetype BKS而不是-storetype JKS
  • -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider

或者,您可以使用KeyStore Explorer將密鑰庫從JKS轉換為BKS(如果您使用Java 7運行KSE)。

要將BKS密鑰庫用於SSL,您必須添加另一個系統屬性:

System.setProperty("javax.net.ssl.keyStoreType", "BKS");

應該是這樣,但坦率地說,我建議您切換到Java 7或RSA密鑰。

暫無
暫無

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

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