我知道通过添加/修改此条SubjectAltName
目openssl.cnf
可以实现,但是有没有一种方法可以做到这一点而不必每次都修改该文件?
答案1
openssl.cnf
您不必以任何方式弄乱该文件。
以下命令演示如何使用 SAN 为电子邮件生成自签名证书[email protected]
:
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:[email protected]')
这里的技巧是包含一个[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:[email protected]'
这里我们使用的是新-addext
选项,所以我们不再需要-extensions
and-config
了。
不要忘记验证生成的证书的内容:
openssl x509 -noout -text -in example.crt
也可以看看:https://security.stackexchange.com/a/198409/133603和https://stackoverflow.com/a/41366949/19163
答案2
在openssl.cnf
顶部添加条目(在未设置SAN = "email:copy"
环境变量的情况下具有默认值)并在相应部分中使用.现在只需调用,其中确保也使用主地址。 (改编自SAN
SubjectAltName = ${ENV::SAN}
SAN="email:copy, email:adress@two" openssl ...
email:copy
这里)