openssl req -new 带有一些默认的 subj 值

Kyl*_*cot 10 openssl

我想使用 openssl 创建 CSR,同时提供国家名称、州或省名称等的一些答案,我仍然希望它提示输入通用名称 (FQDN)。到目前为止,我有类似的东西:

openssl req -new -sha256 -key example.com.key -out example.com.csr -subj "/C=US/ST=Ohio/L=Columbus/O=Widgets Inc/OU=Some Unit"

但是,这不会提示我输入通用名称。这样做的正确方法是什么?

小智 13

您可以在命令行上read使用命令中的结果变量openssl执行此操作:

read -p "FQDN? " cn; openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout $cn.key -subj "/CN=$cn\/emailAddress=admin@$cn/C=US/ST=Ohio/L=Columbus/O=Widgets Inc/OU=Some Unit" -out $cn.csr
Run Code Online (Sandbox Code Playgroud)

如果这是您经常做的事情,请将其设为函数并将其添加到您的.bashrc文件中,这样您就可以用参数替换提示:

function csr { openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout $1.key -subj "/CN=$cn\/emailAddress=admin@$1/C=US/ST=Ohio/L=Columbus/O=Widgets Inc/OU=Some Unit" -out $1.csr }
Run Code Online (Sandbox Code Playgroud)

然后在您需要时调用它:

csr example.com
Run Code Online (Sandbox Code Playgroud)

下面的 openssl.conf 文件几乎做了同样的事情:

[req]
default_bits=2048
encrypt_key=no
default_md=sha256
distinguished_name=req_subj
[req_subj]
commonName="Fully Qualified Domain Name (FQDN)"
emailAddress="Administrative Email Address"
countryName="Country Name (2 letter code)"
countryName_default=US
stateOrProvinceName="State Name (full name)"
stateOrProvinceName_default=Ohio
localityName="Locality Name (e.g., city)"
localityName_default=Columbus
organizationName="Organization Name (e.g., company)"
organizationName_default=Widgets Inc
organizationalUnitName="Organizational Unit Name (e.g., section)"
organizationalUnitName_default=Some Unit
Run Code Online (Sandbox Code Playgroud)

然后将您的OPENSSL_CONF环境变量设置为该文件

export $OPENSSL_CONF=~/.dotfiles/openssl.conf
Run Code Online (Sandbox Code Playgroud)

或通过 CLI 上的开关指定它

openssl req -new -config openssl.conf -keyout example.key -out example.csr
Run Code Online (Sandbox Code Playgroud)

我这么说几乎是因为它仍然会提示您输入这些属性,但它们现在是默认设置,因此您可以Return在指定域和电子邮件后敲击最后的键。