【问题标题】:Openssl RSA key PEM and DER conversion - does not matchOpenssl RSA 密钥 PEM 和 DER 转换 - 不匹配
【发布时间】:2016-11-26 19:34:34
【问题描述】:

我正在研究 openssl 的 RSA 密钥生成和操作。首先,我生成了一个以 PEM 格式编码但未加密的密钥对:

openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048

然后我转换成DER格式:

openssl rsa -inform PEM -outform DER -in key.pem -out key1.cer

然后我将其转换回 PEM 编码:

openssl rsa -inform DER -outform PEM -in key1.cer -out key2.pem

现在,如果我比较两者,它们的内容(BASE64 编码文本)是不同的。文件的大小也不同...

diff key.pem key2.pem

这是为什么呢?我在这里做错了吗?

所有的钥匙都附在这里。 https://www.dropbox.com/sh/ec1sm3y63sahwks/AAB6At3x_j5LRyf63gJDJn39a?dl=0

谢谢, 地番

【问题讨论】:

    标签: openssl rsa


    【解决方案1】:

    查看 PEM 文件,您会看到一个以 -----BEGIN PRIVATE KEY----- 开头,另一个以 -----BEGIN RSA PRIVATE KEY----- 开头。 PEM 块的 BEGIN 和 END 行中的单词指定了块中数据的格式,这些指定了 OpenSSL 支持的大约 10 种(具体取决于您如何计算)不同的数据格式中的两个RSA 密钥。

    第一个是 PKCS8 的未加密变体republished as RFC 5208 在第 5 节。PKCS8 可以处理许多不同算法的私钥,包括 RSA DSA DH 和 ECDSA,有或没有基于密码的加密(PBE) 的密钥。 openssl genpkey 旨在处理多种算法,并使用 PKCS8 格式来处理。

    第二个是仅限 RSA 的 PKCS1 的私钥语法 republished as RFC3447 et pred 在 A.1 节中。这种格式是由旧的openssl rsaopenssl genrsa 函数编写的,因为它们只处理 RSA,并且被称为“传统”或“传统”格式以区别于 PKCS8。 PKCS1 没有定义任何加密格式,但 OpenSSL 支持通用 PEM 加密方案,如果您没有请求,可以将其应用于此格式。但是,OpenSSL“旧版”PEM 加密不如 PKCS8 中使用的加密,因此如果您想要安全性,通常应该使用 PKCS8,或者可能使用 PKCS12 代替 带证书的私钥

    您可以使用 pkey 转换为 PKCS8 DER 并返回 PEM,这与 genpkey 一样处理多种算法并使用 PKCS8:

    openssl pkey -in key.pem [-inform PEM] -out key.der -outform DER 
    openssl pkey -in key.der -inform DER -out xxx.pem [-outform PEM]
    # now xxx.pem is the same as key.pem 
    

    由于 PEM 文件(与 DER 不同)可以通过 BEGIN 行中的类型识别,因此您可以直接将 PKCS1 PEM 转换回 PKCS8:

    openssl pkey -in key2.pem -out yyy.pem 
    # now yyy.pem is the same as key.pem 
    

    使用 OpenSSL 库的程序,包括但不限于openssl 命令行,可以自动读取这两种格式的私钥 PEM 文件,如果提供正确的密码,也可以自动读取这两种加密格式中的任何一种。

    【讨论】:

    • 谢谢先生!很明确的答案。但是,我显然赞成我是新人,声望低,所以我的赞成票不算数...对不起..但是这个答案应该会吸引一些赞成票!
    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2011-03-10
    • 1970-01-01
    • 2021-07-14
    • 2018-04-16
    相关资源
    最近更新 更多