是否有可能使openssl跳过国家/通用名称提示?

时间:2011-11-10 05:13:08

标签: openssl

有没有办法让openssl滑动提示,例如

Country Name (2 letter code) [US]:
Organization Name (eg, company) [My Company Name LTD.]:
Common Name (eg, YOUR name) [something]:

使用

创建证书时
openssl req -config openssl.cnf -new -x509 ...

鉴于这些参数在openssl.cnf文件中提供

e.g。

countryName         = Country Name (2 letter code)
countryName_default     = US
countryName_min     = 2
countryName_max     = 2
0.organizationName      = Organization Name (eg, company)
0.organizationName_default  = My Company Name LTD.
commonName          = Common Name (eg, YOUR name)
commonName_max      = 64
commonName_default      = ${ENV::CN}

5 个答案:

答案 0 :(得分:107)

感谢@indiv

根据此guide -subj是可行的方法,例如

-subj '/CN=www.mydom.com/O=My Company Name LTD./C=US'

答案 1 :(得分:30)

另一种解决方案是在配置文件中使用 prompt 指令。
OpenSsl: Configuration file format

prompt

  

如果设置为值no,则会禁用证书字段的提示,并直接从配置文件中获取值。它还会更改distinguished_nameattributes部分的预期格式。

     

distinguished nameattribute部分有两种不同的格式。

     

如果提示选项设置为no,则这些部分只包含字段名称和值:例如,

 CN=My Name
 OU=My Organization
 emailAddress=someone@somewhere.org
  

这允许外部程序(例如基于GUI)生成包含所有字段名称和值的模板文件,并将其传递给req

     

或者,如果提示选项不存在或未设置为no,则该文件包含字段提示信息。它由以下形式的行组成:

 fieldName="prompt"
 fieldName_default="default field value"
 fieldName_min= 2
 fieldName_max= 4

答案 2 :(得分:11)

生成配置文件,在[req]部分中可以输入prompt = no。

例如:

[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
C = US
ST = California
L = Los Angeles
O = Our Company Llc
#OU = Org Unit Name
CN = Our Company Llc
#emailAddress = info@example.com

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com

然后只执行例如。

openssl req -new -sha256 -config THATFILE.conf -key example.com.key -out example.com.csr

答案 3 :(得分:2)

不支持混合方法

可以直观地想到一种混合方法是可行的,您可以考虑将一些静态字段放入openssl.cnf中,并通过-subj选项指定一些(CN)。但是,这不起作用。

我测试了一种情况

  • 在openssl.cnf部分中输入C,ST,L,O和OU req_distinguished_name
  • openssl req一起运行 -subj=/CN=www.mydom.com

openssl抱怨缺少必填的“国家名称”字段,并且所生成的证书在主题行中仅具有CN。似乎-subj选项完全覆盖了主题行,并且不允许更新单个字段。

这使得以下提供主题字段的所有以下三种方法互斥:

  • 提示
  • 配置文件
  • -subj选项

答案 4 :(得分:0)

-batch可选参数使openssl req命令不提示输入任何信息字段。我以这种方式使用它,而无需使用配置文件来自动执行自签名证书。

它在帮助中列出:

openssl help req
...
...
-batch              Do not ask anything during request generation