如何在 OpenSSL CNF 文件中使用用户输入的变量?
我有以下CNF:
[ req_distinguished_name ]
emailAddress = Email Address
# specify defaults
emailAddress_default = [email protected]
我如何使用电子邮件用户选择对于emailAddress
下一节中的选项,如果不使用脚本来生成 CNF?
[ usr_cert ]
# Extensions for client certificates (`man x509v3_config`).
subjectAltName = email:[email protected]
答案1
在 OpenSSL 的配置文件中,你可以使用来自不同部分的值${section::name}
。但是,这些值似乎是在流程的早期(在用户输入之前)解析的,因此会出现如下行:
[ req_distinguished_name ]
emailAddress = Email Address
emailAddress_max = 64
....
[usr_cert]
# Extensions for client certificates (`man x509v3_config`).
subjectAltName = email:${req_distinguished_name::emailAddress}
将导致主题备用名称为:
X509v3 Subject Alternative Name:
email: Email Address
(假设Email Address
是提示)而不是输入的电子邮件地址。
另一种方法是将您的电子邮件地址作为环境变量,在运行 OpenSSL 之前设置,然后在您的配置中使用以下内容:
[usr_cert]
# Extensions for client certificates (`man x509v3_config`).
subjectAltName = email:${ENV::email_address}
并运行:
email_address="[email protected]" openssl req -new -newkey test.key -out test.csr -nodes
生成的请求 ( test.csr
) 将具有:
X509v3 Subject Alternative Name:
email: [email protected]
这可能不适合您,当然取决于您的应用程序,但这可能是您能获得的最接近的答案。
另一种选择是使用脚本动态生成 OpenSSL 配置,其中包含正确的电子邮件地址和其他已配置的详细信息。