如何在java中读取.pem文件格式的EC私钥
Posted
技术标签:
【中文标题】如何在java中读取.pem文件格式的EC私钥【英文标题】:How to read EC Private key in java which is in .pem file format 【发布时间】:2018-06-04 02:39:20 【问题描述】:如何使用 JAVA 读取 .pem 文件中的 EC 私钥。在阅读时,我收到以下异常。
原因:java.security.InvalidKeyException: IOException : version mismatch: (supported: 00, parsed: 01
其实我的。 Pem 文件包含以下结构的私钥。
----开始EC私钥------ ====+====+=== ====+====+=== -----结束EC私钥-----
【问题讨论】:
你能详细说明你的问题吗? Questions seeking debugging help ("why isn't this code working?") must include the desired behavior, a specific problem or error and the shortest code necessary to reproduce it in the question itself. Questions without a clear problem statement are not useful to other readers. 见:How to create a Minimal, Complete, and Verifiable example。 当我尝试使用 java 读取 .pem 格式的 EC 私钥时,出现以下异常。原因是:“ java.security.InvalidKeyException: IOException : version mismatch: (supported : 00, 解析: 01)" 【参考方案1】:根据请求从 EC PRIVATE KEY (ex key.pem),我成功地将它导入 java.security.KeyStore
-
从 PEM 转换私钥 => PKCS#8 DER
openssl pkcs8 -in key.pem -inform PEM -topk8 -nocrypt -out key-pkcs8.der -outform DER
-
加载它(jvm版本java-1.8.0-openjdk-1.8.0.201.b09-2.fc28.x86_64)
void loadPrivateKey(KeyStore ks, X509Certificate cert)
File privKeyFile = new File("key-pkcs8.der");
// read private key DER file
DataInputStream dis = new DataInputStream(new FileInputStream(privKeyFile));
byte[] privKeyBytes = new byte[(int)privKeyFile.length()];
dis.read(privKeyBytes);
dis.close();
KeyFactory kf = KeyFactory.getInstance("EC");
// decode private key
PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(privKeyBytes);
PrivateKey privKey = kf.generatePrivate(privSpec);
ks.setKeyEntry("key-alias", privKey, "password".toCharArray(), new Certificate[] cert);
【讨论】:
您能解释一下为什么我们必须执行第 1 步吗?比如 to 和 from 格式的标准名称是什么?以上是关于如何在java中读取.pem文件格式的EC私钥的主要内容,如果未能解决你的问题,请参考以下文章
我在文本文件中有私钥。如何生成 .pem 文件或 .cer 文件
在命令“ansible-playbook”中加密用户私钥文件