如何使用cli覆盖openssl配置文件中的参数?

时间:2019-05-15 02:46:16

标签: openssl

我正在使用freeradius进行EAP-TLS身份验证。

我运行以下命令来生成密钥: openssl req -new -out client.csr -keyout client.key -config ./client.cnf

我想为不同的用户生成几个密钥/证书:

  • emailAddresscommonName下的[client]
  • input_passwordoutput_password下的[ req ]

问题:openssl命令的参数是否覆盖配置文件?

如果没有其他解决方案,我正在考虑使用sed

/etc/freeradius/3.0/certs# cat client.cnf

[ ca ]
default_ca      = CA_default

[ CA_default ]
dir         = ./
certs           = $dir
crl_dir         = $dir/crl
database        = $dir/index.txt
new_certs_dir       = $dir
certificate     = $dir/ca.pem
serial          = $dir/serial
crl         = $dir/crl.pem
private_key     = $dir/ca.key
RANDFILE        = $dir/.rand
name_opt        = ca_default
cert_opt        = ca_default
default_days        = 365
default_crl_days    = 30
default_md      = sha256
preserve        = no
policy          = policy_match

[ policy_match ]
countryName     = match
stateOrProvinceName = match
organizationName    = match
organizationalUnitName  = optional
commonName      = supplied
emailAddress        = optional

[ policy_anything ]
countryName     = optional
stateOrProvinceName = optional
localityName        = optional
organizationName    = optional
organizationalUnitName  = optional
commonName      = supplied
emailAddress        = optional

[ req ]
prompt          = no
distinguished_name  = client
default_bits        = 4096
input_password      = clientpassword
output_password     = clientpassword

[client]
countryName     = JP
stateOrProvinceName = Tokyo
localityName        = Company building
organizationName    = Company name
emailAddress        = testuser@company.com
commonName      = testuser@company.com

1 个答案:

答案 0 :(得分:0)

我发现这两个选项可以覆盖配置文件中的变量:

  1. openssl.cnf中的大多数定义都可以使用命令行选项(如this answer suggests)覆盖。但是,我不确定这是否适用于您提到的变量。
  2. 运行OpenSSL CLI时,环境将映射到名为ENV的部分。通过使用$ENV::name格式,可以在任何其他节中替换环境变量。此信息来自OpenSSL documentation (config - OpenSSL CONF library configuration files)

关于第二种方法,this config filesubjectAltName环境变量中读取[ server_reqext ]部分中的SAN变量。