【问题标题】:How to convert a java generated public key to pem format with openssl如何使用 openssl 将 java 生成的公钥转换为 pem 格式
【发布时间】:2017-02-21 12:08:06
【问题描述】:

我有一个公共 RSA 密钥,如下所示:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHn/hfvTLRXViBXTmBhNYEIJeGGGDkmrYBxCRelri
LEYEcrwWrzp0au9nEISpjMlXeEW4+T82bCM22+JUXZpIga5qdBrPkjU08Ktf5n7Nsd7n9ZeI0YoAKCu
b3ulVExcxGeS3RVxFai9ozERlavpoTOdUzEH6YWHP4reFfpMpLzwIDAQAB

我需要将其转换为 PEM 格式,以便我可以使用此公钥编写自己的 python 代码,我看到相反操作有很多答案,但现在我需要将它从 JAVA 样式转换为 PEM ,谁能帮忙?

【问题讨论】:

  • 您是如何生成密钥的? Java 有几种方法可以表示它们
  • 你正在使用什么python包,你认为需要特定格式的密钥?
  • oliv 的解决方案有效,但还是谢谢大家:P

标签: java python rsa keytool


【解决方案1】:

只需转换回 base64 编码的 pub 密钥并将其扔给 openssl:

echo "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHn/hfvTLRXViBXTmBhNYEIJeGGGDkmrYBxCRelriLEYEcrwWrzp0au9nEISpjMlXeEW4+T82bCM22+JUXZpIga5qdBrPkjU08Ktf5n7Nsd7n9ZeI0YoAKCub3ulVExcxGeS3RVxFai9ozERlavpoTOdUzEH6YWHP4reFfpMpLzwIDAQAB" | base64 -d | openssl rsa -inform der -pubin -out rsakey.pub

-inform der 告诉 openssl 将密钥作为二进制文件(默认为 PEM)

-pubin 告诉期待一个公共(默认为私有)

-out是写密钥


另一种方法是在base64编码的rsa公钥前后附加openssl标签:

sed 's/^/-----BEGIN PUBLIC KEY-----\n/;s/$/\n-----END PUBLIC KEY-----/' <<< "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHn/hfvTLRXViBXTmBhNYEIJeGGGDkmrYBxCRelriLEYEcrwWrzp0au9nEISpjMlXeEW4+T82bCM22+JUXZpIga5qdBrPkjU08Ktf5n7Nsd7n9ZeI0YoAKCub3ulVExcxGeS3RVxFai9ozERlavpoTOdUzEH6YWHP4reFfpMpLzwIDAQAB" | openssl rsa -pubin

【讨论】:

  • 很好的解释!
【解决方案2】:

你可以像这样创建一个 bash 脚本:

#!/bin/bash

# Loop through all the certs in the current folder that have the .cer extension
for cert in *.cer
do

#get filename wihtout ext
filename="${cert%.*}"
#echo ${filename} 

#convert to PEM
openssl x509 -inform der -in ${cert} -outform pem -out ${filename}.crt

done

我用它来将证书转换为 pem 格式。希望能帮到你

【讨论】:

  • 嗨,克雷格,感谢您的快速回答,但是我发布的密钥不是 DER,而是 JAVA 生成的,带有 openssl x509 -inform der -in ${cert},我刚得到以下错误:
  • 无法加载证书 140258637911704:error:0D0680A8:asn1 编码例程:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1197:140258637911704:error:0D07803A:asn1 encoding routine_I:nested as N2 .c:374:Type=X509
  • 文件的扩展名是什么?
  • 实际上它不在文件中,只是我在问题中发布的一个字符串,oliv 的解决方案效果很好,但还是谢谢大家。
猜你喜欢
  • 2017-10-14
  • 2011-07-28
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多