一尘不染

如何通过命令行将多个电子邮件地址添加到 SSL 证书?

javascript

我知道可以通过添加/修改其中的SubjectAltName条目来实现openssl.cnf,但是有没有办法做到这一点而不必每次都修改该文件?


阅读 204

收藏
2022-02-18

共2个答案

一尘不染

您不必openssl.cnf以任何方式处理文件。

以下命令演示如何使用 SAN 为电子邮件生成自签名证书nobody@example.com

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
  -keyout example.key -out example.crt -subj '/CN=Nobody' \
  -extensions san \
  -config <(echo '[req]'; echo 'distinguished_name=req';
            echo '[san]'; echo 'subjectAltName=email:nobody@example.com')

这里的诀窍是包含一个[req]足以让 OpenSSL 在没有其主openssl.cnf文件的情况下相处的最小部分。

在 OpenSSL ≥ 1.1.1 中,这可以缩短为:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
  -keyout example.key -out example.crt -subj '/CN=Nobody' \
  -addext 'subjectAltName=email:nobody@example.com'

这里我们使用的是新-addext选项,所以我们不再需要-extensionsand-config了。

不要忘记验证生成证书的内容:

openssl x509 -noout -text -in example.crt
2022-02-18
一尘不染

您可以在一个命令中执行此操作:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365

如果您不想使用密码保护您的私钥,也可以添加-nodes(缩写)。no DES否则它将提示您输入“至少 4 个字符”的密码。

您可以将days参数 (365) 替换为任何数字以影响到期日期。然后它会提示您输入“国家名称”之类的内容,但您可以点击Enter并接受默认值。

添加-subj '/CN=localhost'以抑制有关证书内容的问题(替换localhost为您想要的域)。

除非您之前将自签名证书导入浏览器,否则不会向任何第三方验证自签名证书。如果您需要更高的安全性,您应该使用由证书颁发机构(CA) 签名的证书。

2022-02-18