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

是否有可能使openssl跳过国家/公共名称提示?,openssl,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 多亏了 根据这个-s

有没有办法让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

多亏了

根据这个
-subj
是一条路要走,例如

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

另一种解决方案是在配置文件中使用
prompt=no
指令。

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

可分辨名称
属性
部分有两种不同的格式

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

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

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


生成一个配置文件,并在[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

不支持混合方法

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

我测试了一个场景

  • 将C、ST、L、O和OU放入openssl.cnf部分
    请求可分辨名称
  • 使用
    -subc=/CN=www.mydom.com
openssl抱怨强制性国家名称字段丢失,生成的证书在主题行中只有CN。似乎
-subj
选项完全覆盖主题行,不允许更新单个字段

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

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

    • 可选参数
      -batch
      导致
      openssl req
      命令不提示输入任何信息字段。我这样使用它,而不需要配置文件来自动化自签名证书

      它列在帮助中:

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

      您可以在命令行上将这些内容作为参数传递。我记不起语法了。谢谢,行得通<代码>-subc'/C=US/ST=Oregon/L=Portland/CN=www.madboa.com'是进入的方式,这种方式不需要配置文件我不明白为什么最后显示这个答案…谢谢确认。这确实应该标记为bug。当我运行它时,
      -subc
      被忽略,即使在
      -config
      之后指定。这应该是可以接受的答案。如果已经有一个配置文件,那么提供/CN/O/C选项是没有意义的,因为它再次是命令。@AdityaVikasDevarapalli在写了这个答案8年后,我同意。但我有偏见,我想它不是真的没有配置文件:如果没有指定,它是从一个默认的位置,并失败,如果它没有安装在那里。
      [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
      
      openssl help req
      ...
      ...
      -batch              Do not ask anything during request generation