[英]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,您需要一個本機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.