OpenSSL 中 PEM 格式的默认密码是什么?

Vla*_*aev 5 openssl

我使用 openssl 生成密钥/证书

openssl.exe req -x509 -days 1000 -newkey rsa:1024 -keyout key.pem -out cert.pem
Run Code Online (Sandbox Code Playgroud)

它提示输入密码。我猜测密码是用于密钥加密的。但是我没有指定任何密码。在这种情况下使用什么密码?

ind*_*div 4

默认密码是DES-EDE3-CBC,它是 CBC 模式下的三密钥三重 DES EDE。您可以在源代码文件req.c中看到这一点。

cipher=EVP_des_ede3_cbc();
Run Code Online (Sandbox Code Playgroud)

如果您使用的是使用选项编译的 OpenSSL 版本OPENSSL_NO_DES,则默认情况下库不会加密密钥。这与传递-nodes参数的行为相同。

解决这个问题的一个更简单的方法就是查看您的密钥文件。它在 PEM 标头中公布密码。

$ cat key.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,CAFD88DF2EF2EE81
...
Run Code Online (Sandbox Code Playgroud)

  • 没有标头,只有“-----BEGIN ENCRYPTED PRIVATE KEY-----”。但源码解释了很多。 (2认同)
  • 根据 2011 年 9 月 15 日:是的。OpenSSL 长期以来支持“传统”算法特定格式(BEGIN RSA PRIVATE KEY、BEGIN DSA PRIVATE KEY、BEGIN EC PRIVATE KEY),这些格式可以选择使用 PEM 标头进行 PB 加密,并且通用标准 PKCS#8 格式有两个选项:清除(BEGIN PRIVATE KEY)并在 ASN.1 内加密(BEGIN ENCRYPTED PRIVATE KEY)。使用“openssl asn1parse”显示后者从 ASN.1 解码 pbe 算法和参数(盐和计数)。从版本 1.0.0 开始,通用命令 `req pkcs8 pkcs12 genpkey pkey` 使用 PKCS#8 而不是旧格式。 (2认同)