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

时间:2014-12-28 13:52:16

标签: java ssl certificate keystore jks

我创建了包含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?

1 个答案:

答案 0 :(得分:4)

基本上,要在Java 6中使用ECC,您需要做的就是添加一个支持ECC的附加提供程序。没有付钱,你有两个选择:

  1. Sun PKCS#11提供商
  2. Bouncy Castle提供商
  3. 对于选项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密钥。