我创建了包含trustedCertEntry和PrivateKeyEntry的新JKS密钥库。两者都使用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?
答案 0 :(得分:4)
基本上,要在Java 6中使用ECC,您需要做的就是添加一个支持ECC的附加提供程序。没有付钱,你有两个选择:
对于选项1,您需要一个本机PKCS#11库,我假设您没有。选项2可能是更好的选择,因为PKCS#11实际上是智能卡或HSM中的密钥。但只是为了记录,如果有人想要这样做,这里有一个如何做的描述(NSS部分无关紧要):How to export ECC key and Cert from NSS DB and import into JKS keystore and Oracle Wallet
选项2要求密钥库属于Bouncy Castle(BKS或UBER)提供的类型之一,并且需要安装Bouncy Castle提供程序。
对于提供程序安装,请按照以下说明操作:Provider Installation。可能有必要在标准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密钥。