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


82

有没有一种方法可以使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文件中提供的事实

例如

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}

3
您可以在命令行中将这些内容作为参数传递。我不记得语法了。
indiv

1
谢谢,那行得通!-subj '/C=US/ST=Oregon/L=Portland/CN=www.madboa.com'是要走的路
Tzury Bar Yochay

Answers:



35

另一种解决方案是在配置文件中使用prompt指令。
请参见OpenSsl:配置文件格式

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
这应该是公认的答案。如果已经有配置文件,则没有必要再提供/ CN / O / C选项作为命令。
Aditya Vikas Devarapalli

1
我写完这个答案8年后,@ AdityaVikasDevarapalli。但是我有偏见。
VonC

15

生成一个配置文件,然后在[req]部分中输入提示符= 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

4

不支持混合方法

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

我测试了一个场景

  • 将C,ST,L,O和OU放在openssl.cnf部分中, req_distinguished_name然后
  • openssl req-subj=/CN=www.mydom.com

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

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

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

感谢您确认。这确实应该标记为错误。当我运行它时,-subj即使在之后指定也将被忽略-config
奥索斯

1

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

它在帮助中列出:

openssl help req
...
...
-batch              Do not ask anything during request generation
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.