Keytool EC KeyPairGenerator 不可用

Keytool EC KeyPairGenerator not available

当我使用 keytool 通过 ECC 生成密钥时,我得到这个 error:

Error keytool: java.security.NoSuchAlgorithmException: EC KeyPairGenerator not available

那么用于生成密钥的语法是:

keytool -genkey -alias testing -keyalg EC -keysize 256 -keystore try.jks -dname "CN=localhost,OU=dep,O=lks,L=ny,ST=ny,C=USA"

我有这个 Java 版本:

openjdk version "1.8.0_60"
OpenJDK Runtime Environment (build 1.8.0_60-b16)                            
OpenJDK 64-Bit Server VM (build 25.60-b16, mixed mode)

此错误表明您的 EC 安全提供程序丢失,请执行以下操作以添加它:

  • 编辑文件"jdk1.8.0_65\lib\security\java.security"
  • 搜索 "List of providers and their preference order"
  • 将 "security.provider.[Last security provider id +1]=sun.security.ec.SunEC" 添加到安全提供商列表。

有关 sunEC 安全提供程序的更多详细信息,请参阅此 link

我通过阅读以下 article(由用户@QuakeCore 链接)解决了这个问题。如果有人有同样的问题,he/she可以按照我的步骤解决:

  1. 下载 Java Oracle (tar.gz);
  2. 将文件 jdk1.8.0_*/jre/lib/amd64/libsunec.so 从提取的文件夹复制到 /usr/lib/jvm/java-1.8.0-openjdk.x86_64/jre/lib/amd64/libsunec.so
  3. 使用我原来问题中写的语法生成密钥。

我在 Ubuntu 16.04 与 pepk (Play Encrypt Private Key) 有同样的错误。

我用接近 CipherX 答案的解决方案解决了这个问题:

  1. 下载 Java Oracle (tar.gz)
  2. 提取文件
  3. 不是启动安装在系统上的 java,而是从提取的文件中启动 java
~/Downloads/android/jdk-9.0.1/bin/java -jar pepk.jar --keystore=acme.keystore \
--alias=acme --output=encrypted_private_key_path --encryptionkey=eb…

Error: EC KeyPairGenerator not available 错误消失了。