使用 OpenSSL 生成带有密码的 CSR 和私钥

信息安全 密码学 证书 openssl 佩姆
2021-08-29 09:08:25

我正在使用以下命令通过使用OpenSSL生成 CSR 和私钥

openssl req -new -subj "/CN=sample.myhost.com" -out newcsr.csr -nodes -sha512 -newkey rsa:2048

它生成两个文件:

  • newcsr.csr
  • privkey.pem

生成的私钥没有密码:如何在生成过程中添加一个?

注意:考虑到我的最终目标是p12通过结合根据 CSR 提供​​的证书和私钥(使用密码保护)来生成文件。

2个回答

抛弃“-nodes”

如果您确实想要加密,那么您需要从您的命令中删除(名称尴尬)-nodes(阅读:无 DES加密”)参数。

因为-nodes会导致一个未加密的 privkey.pem 文件。如果你把它排除在外,那么文件将被加密。

因此,没有-nodesopenssl 只会提示您输入如下密码:

$ openssl req -new -subj "/CN=sample.myhost.com" -out newcsr.csr -sha512 -newkey rsa:2048
Generating a RSA private key
.........................................+++++
................+++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----

但是交互式提示对于自动化来说并不是很好。因此,如果您不想收到提示,那么您可能需要继续阅读如何使用“传递短语参数”。

使用 OpenSSL“传递短语参数”

如果您想为输出文件提供密码,您将需要(也很笨拙地命名)-passout参数。

这是一个多维参数,允许您从多个来源读取实际密码。例如来自文件或环境变量。或直接从命令行(最不安全)。以下是每种用法的示例。

(官方手册页在“密码短语选项”部分列出了更多密码源(在此处存档。))

示例:来自命令行的密码,带有“pass:”

$ openssl req -new -passout pass:"Pomegranate" -subj "/CN=sample.myhost.com" -out newcsr.csr -sha512 -newkey rsa:2048
Generating a 2048 bit RSA private key
................................................................................................................................+++
......................+++
writing new private key to 'privkey.pem'
-----


$ openssl rsa -in privkey.pem -passin pass:'Pomegranate' | head -n2
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAsSP5kLRPP8wPODrnvuAeeoqGMqTOvRULL423vv6+zjYhwPUi

示例:来自带有“env:”的变量的密码

$ export MYPASS='Elderberry'


$ openssl req -new -passout env:MYPASS -subj "/CN=sample.myhost.com" -out newcsr.csr -sha512 -newkey rsa:2048
Generating a 2048 bit RSA private key
............................+++
.....................+++
writing new private key to 'privkey.pem'
-----


$ openssl rsa -in privkey.pem -passin pass:'Elderberry' | head -n2
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAv0NnBnigPp+O9G4UXc0qSyeELdJJjTmnO9GEtE5GlPGoK7vW

示例:来自带有“文件:”的文件的密码

$ echo "Farkleberry" > password.txt


$ openssl req -new -passout file:password.txt -subj "/CN=sample.myhost.com" -out newcsr.csr -sha512 -newkey rsa:2048
Generating a 2048 bit RSA private key
......................+++
...........+++
writing new private key to 'privkey.pem'
-----


$ openssl rsa -in privkey.pem -passin pass:'Farkleberry' | head -n2
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAsHICgYvqe4i9CIR5eQk38JJmuTaJQvyxPH9S+BahT5XWh88z

相关阅读

您可以使用以下命令使用密码更新密钥:

openssl rsa -des3 -in server.key -out server.key.new

然后使用mv server.key.new server.key覆盖旧密钥。