我正在尝试创建一个 bash 脚本来管理 PKI。我想使用 OpenSSL conf 文件为使用我的 CA 生成和签名的证书指定一些参数。
我指定了以下默认参数:
[ ca ]
default_ca = my ca
[ my ca ]
dir = "path/to/ca"
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/new_certs
database = $dir/index.txt
serial = $dir/serial.txt
private_key = $dir/ca.key
certificate = $dir/ca.crt
default_days = 3650
default_crl_days = 30
default_md = sha256
policy = policy_strict
[ policy_strict ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = supplied
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 2048
prompt = no
string_mask = utf8only
default_md = sha256
req_extensions = v3_req
distinguished_name = dn
default_days = 365
[ dn ]
C = *my countrycode*
ST = *my country*
L = *my city*
O = *my name
emailAddress = *my mail*
[ v3_req ]
subjectKeyIdentifier = hash
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
subjectAltName = @alt_names
[ ecparam ]
namedCurve = secp384r1
[ alt_names ]
email = *my mail*
我想在使用脚本生成证书期间使用用户在脚本运行时设置的变量指定通用名称、组织单位和 alt_names DNS 条目。
但是,生成如下签名请求时:
openssl req -x509 -newkey ec:secp384r1 -keyout path/to/key -out path/to/cert --subj "/CN=$fqdn/OU=$ou" -addext "subjectAltName=DNS:$fqdn"
-subj
OpenSSL 不使用和参数-addext
,而是使用配置文件中设置的值覆盖(并且这些值未在配置文件中设置,因此 CSR 没有设置任何 CN/OU/subjectAltName DNS)。
有没有办法将命令行参数与配置文件结合起来,特别是针对脚本中要设置的 OU、CN 和 SAN 值?
谢谢