我有一个 CertAndKey.pfx 文件和相应的 EncryptedKey.pem - 均由 CA 提供。以下命令生成 2 个不同的解密密钥文件 key1.pem 和 key2.pem:
openssl rsa -输入加密密钥.pem -输出密钥1.pem
openssl pkcs12 -in CertAndKey.pfx -out key2.pem -nodes
(当然我已经编辑了 key2.pem,公共部分已被清除,仅保留了私钥部分。)
解密密钥的差异不仅在于“开始/结束 rsa 私钥”与“开始/结束私钥”行(key1 在此行中有“RSA”字样,而 key2 没有)。密钥主体也不同,并且长度不相等。但是,key1 和 key2 在 TLS 握手中似乎都工作正常。
我还尝试解码密钥并以二进制形式进行比较:
Certutil -decode key1.pem key1.bin
Certutil-解码key2.pem key2.bin-
并且这些.bin文件也不同,并且长度不相等。
我对此还很陌生,有人可以为我解释一下这个奇怪的现象吗?
答案1
格式是实际差异。
第一个命令以“PEM”或“PKCS#1”格式输出密钥。文本标头将密钥类型标识为 RSA,如果已加密,则有一个密码参数(算法和 IV)的子标头。里面的实际数据是一个平面数字数组(n、e、d、p、q),如果不是周围的文本,您不得不猜测这是一个 RSA 密钥。
第二条命令输出“PKCS#8”格式的密钥。此处相同的元信息已被移动里面二进制数据:这些 RSA 参数现在与 OID 一起嵌套在另一个数组中,表明这确实是 RSA 密钥。如果加密,则密码参数也存储在其中。
但这两种格式都类似,因为它们都使用 ASN.1 DER 来构造二进制数据——这意味着如果你将两个密钥都传输openssl asn1parse -i
或上传到这个不错的解码器。
您可以通过管道传输密钥openssl pkey
来在格式之间进行转换。
请注意,某些命令的结果可能取决于 OpenSSL 版本。随着时间的推移,以前以 PKCS#1 格式输出密钥的各种子命令已默认切换为生成 PKCS#8。