openssl - 从PEM到DER的RSA公钥

时间:2016-02-08 12:37:55

标签: openssl cryptography

我在使用openssl翻译RSA pub密钥时遇到了一个问题,我想获得DER格式的公钥。这是我做的:

  1. 生成RSA密钥对 openssl genrsa -out alice.key 1024

  2. 仅从my.key导出公钥 a)openssl rsa -in alice.pem -RSAPublicKey_out -out alice_pub.pem b)openssl rsa -in alice.pem -poutout -out alice_pub2.pem

  3. 这两种方法在.pem中生成不同的页脚:第一个输出 --Begin RSA public key ----和第二项产出 -- Begin Public key ----

    1. 使用openssl asn1parse分析两个公钥pem文件openssl asn1 parse -inform PEM -in alice_pub.pem时,发生了意外情况。 对于alice_pub.pem,它运行良好;对于alice_pub2.pem,openssl无法提取“N”和“E”参数,表明它们已经是“rsaEncryption”。

    2. Openssl只能将第二个pem转换为DER,但是,pem内容明显不正确......

    3. 请告诉我如何解决这个问题。非常感谢。这个问题可以轻松复制。

1 个答案:

答案 0 :(得分:0)

当你说OpenSSL只能将第二个PEM变换为DER时,你不清楚你是什么意思 - openssl asn1parse可以同时读取这两个PEM并输出为DER。

-RSAPublicKey_out的输出只是公钥而没有额外的换行,当通过openssl asn1parse时,您会得到以下内容:

    0:d=0  hl=3 l= 137 cons: SEQUENCE
    3:d=1  hl=3 l= 129 prim: INTEGER           :...
  135:d=1  hl=2 l=   3 prim: INTEGER           :010001

然而,-pubout生成的输出是X509格式的公钥,当通过openssl asn1parse时,您会得到以下输出:

    0:d=0  hl=3 l= 159 cons: SEQUENCE
    3:d=1  hl=2 l=  13 cons: SEQUENCE
    5:d=2  hl=2 l=   9 prim: OBJECT            :rsaEncryption
   16:d=2  hl=2 l=   0 prim: NULL
   18:d=1  hl=3 l= 141 prim: BIT STRING

此格式将公钥(显示为未解码为BIT STRING)包含一个指示符,表明它是 RSA 公钥(rsaEncryption)。

您可以使用-pubout的{​​{1}}选项在-strparse输出中显示已编码公钥的详细信息。在上面的输出中,您可以看到openssl asn1parse位于偏移18处,因此使用:

BIT STRING

您将获得以下内容:

openssl asn1parse -inform PEM -in alice_pub2.pem -strparse 18

换句话说,与 0:d=0 hl=3 l= 137 cons: SEQUENCE 3:d=1 hl=3 l= 129 prim: INTEGER :... 135:d=1 hl=2 l= 3 prim: INTEGER :010001 的{​​{1}}选项生成的原始RSA公钥完全相同。