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

Tzu*_*hay 71 openssl

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

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

使用时创建证书

openssl req -config openssl.cnf -new -x509 ...
Run Code Online (Sandbox Code Playgroud)

鉴于这些参数在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}
Run Code Online (Sandbox Code Playgroud)

Tzu*_*hay 114

感谢@indiv

根据本指南 -subj是要走的路,例如

-subj '/CN=www.mydom.com/O=My Company Name LTD./C=US'
Run Code Online (Sandbox Code Playgroud)

  • 我找到了更多属性名称[这里](http://stackoverflow.com/a/8902223/325852) (7认同)
  • 我不明白为什么这个答案显示在最后......谢谢 (3认同)
  • 事实上,这种方式不需要配置文件 (2认同)

Von*_*onC 31

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

prompt

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

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

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

 CN=My Name
 OU=My Organization
 emailAddress=someone@somewhere.org
Run Code Online (Sandbox Code Playgroud)

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

或者,如果缺少提示选项或未设置为否,则该文件包含字段提示信息.它由以下形式的行组成:

 fieldName="prompt"
 fieldName_default="default field value"
 fieldName_min= 2
 fieldName_max= 4
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。如果已经有配置文件,则再次提供 /CN /O /C 选项是没有意义的命令。 (4认同)
  • @AdityaVikasDevarapalli 在写下这个答案 8 年后,我同意。但我有偏见。 (2认同)

Flo*_*anB 13

生成配置文件,在[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
Run Code Online (Sandbox Code Playgroud)

然后执行eg

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


Moh*_*zim 10

不支持混合方法

直觉上可能会认为混合方法是可能的,您可能会考虑在 openssl.cnf 中放置一些静态字段并通过-subj选项指定一些(CN)。然而,这是行不通的。

我测试了一个场景,其中我

  • 将 C、ST、L、O 和 OU 放入 openssl.cnf 部分 req_distinguished_name
  • openssl req与 一起 跑-subj=/CN=www.mydom.com

openssl 抱怨缺少强制性国家/地区名称字段,并且生成的证书在主题行中只有 CN。似乎-subj选项完全覆盖主题行并且不允许更新单个字段。

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

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


Dan*_*ach 7

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

它在帮助中列出:

openssl help req
...
...
-batch              Do not ask anything during request generation
Run Code Online (Sandbox Code Playgroud)