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

标签 java ssl certificate keystore jks

我创建了新的 JKS keystore ,其中包含 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

有没有在 Java 1.6 中使用 JKS 的方法?

最佳答案

基本上,要使 ECC 在 Java 6 中可用,您必须做的是添加一个额外的支持 ECC 的提供程序。如果不付钱,您有两种选择:

  1. Sun PKCS#11 提供商
  2. Bouncy Castle提供者

对于选项 1,您需要一个 native PKCS#11 库,我假设您没有。无论如何,选项 2 可能是更好的选择,因为 PKCS#11 实际上用于智能卡或 HSM 中的 key 。但是,如果有人想这样做,这里只是为了记录,这里是如何做的描述(NSS 部分无关紧要):How to export ECC key and Cert from NSS DB and import into JKS keystore and Oracle Wallet

选项 2 要求 keystore 属于 Bouncy CaSTLe(BKS 或 UBER)提供的类型之一,并且需要安装 Bouncy CaSTLe 提供程序。

对于提供程序安装,请遵循以下说明:Provider Installation .可能需要在标准 SSL 提供程序 (com.sun.net.ssl.internal.ssl.Provider) 之前添加 BC 提供程序,但我对此不确定。

之后,您可以使用之前使用过的 keytool 命令将 key 导入 BKS keystore ,并进行以下修改:

  • -storetype BKS 代替 -storetype JKS
  • -providerclass org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider

或者您可以使用 KeyStore Explorer用于将 keystore 从 JKS 转换为 BKS(如果您使用 Java 7 运行 KSE)。

要将 BKS keystore 用于 SSL,您必须添加另一个系统属性:

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

应该是这样,但坦率地说,我建议切换到 Java 7 或 RSA key 。

关于java - 如何在 Java 1.6 中使用 ECC 私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27677037/

相关文章:

java - 在没有 "mappedBy"的情况下区分 JPA 关系的拥有方和反向方

java.lang.IndexOutOfBoundsException : Invalid index 1, 在 Sectioned RecyclerView 中大小为 1

ssl - 在哪里安装SSL?

client-certificates - 验证证书是否属于给定用户

ios - Apple iOS 分发证书

c# - 在 C# 中使用带有 SSL 证书的 Rest 服务

java - 通过依赖注入(inject)设置 Java Enums 值

java - 是否有任何工具可以重构Java代码库的编码样式?

azure - 为虚拟应用程序指定 ClientCertEnabled

java - Spring 启动 : One-way SSL forces key store configuration on client side