我知道可以通过添加/修改其中的SubjectAltName条目来实现openssl.cnf,但是有没有办法做到这一点而不必每次都修改该文件?
您不必openssl.cnf以任何方式处理文件。
openssl.cnf
以下命令演示如何使用 SAN 为电子邮件生成自签名证书nobody@example.com:
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文件的情况下相处的最小部分。
[req]
在 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了。
-addext
-extensions
-config
不要忘记验证生成证书的内容:
openssl x509 -noout -text -in example.crt
您可以在一个命令中执行此操作:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365
如果您不想使用密码保护您的私钥,也可以添加-nodes(缩写)。no DES否则它将提示您输入“至少 4 个字符”的密码。
-nodes
no DES
您可以将days参数 (365) 替换为任何数字以影响到期日期。然后它会提示您输入“国家名称”之类的内容,但您可以点击Enter并接受默认值。
days
添加-subj '/CN=localhost'以抑制有关证书内容的问题(替换localhost为您想要的域)。
-subj '/CN=localhost'
localhost
除非您之前将自签名证书导入浏览器,否则不会向任何第三方验证自签名证书。如果您需要更高的安全性,您应该使用由证书颁发机构(CA) 签名的证书。