openssl“无法在配置中找到'distinguished_name'”


40

我从收到以下错误openssl req

unable to find 'distinguished_name' in config
problems making Certificate Request
41035:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/crypto/conf/conf_lib.c:329:group=req name=distinguished_name

我的理解是,这是“主题”,它不能找到......不过,我确定的是:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=ACME, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

手册的唯一建议是该配置文件不存在。我可以cat "$OPTIONS_FILE",所以它肯定在那里,并且错误不会在错误之前出现,如果是这种情况,则手册会指出该错误,因此,我很确定会openssl看到配置文件。

我的配置文件包含以下内容:

[req]
req_extensions = v3_req

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.example.com 

…这实际上是docs中的示例

我在这里做错了什么?


1
小注释:此处指定的subjectAltName *.*.example.com无效。(您*只能在最左边的组件中有1。)这与这里的问题无关,但不要盲目地使用c / p。
Thanatos

Answers:


30

据我所知-config重写了某种内部配置。如果您看到openssl req手册页的“示例”部分,则显示其中包含配置文件的示例distinguished_name。出于预感,我在配置中添加了以下内容:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

因此,我的整个配置看起来像

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.${DOMAIN}

(请注意,这里的${DOMAIN}内容不是文字的;您应该将其替换为DNS域名;我bash使用cat >"$OPTIONS_FILE" <<EOF,其次是,然后是EOF)在脚本中创建了此文件

openssl req … -subj <my subject> -config <that file> …然后从命令行获取我的主题。对于那些感兴趣的人,整个命令最终看起来像:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=My Company, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

-sha256撰写本文时,我的理解是X.509证书不推荐使用SHA-1,因此(这是未记录的标志……),而subjectAltName则成为必需项²,因此需要配置。为了生成上述最佳实践CSR,我唯一知道的其他陷阱是,您应该使用至少2048位的RSA密钥大小(如果使用的是我,则是RSA);您必须指定openssl genrsa命令的大小,因为当前的默认值是不安全的。

¹虽然在我撰写本文时还没有打破,但人们认为这只是时间问题。请参阅“逐渐淘汰SHA1”
。²不再建议使用CN作为域名;我不确定浏览器何时/是否打算弃用此功能。“不要在主题的公用名中包含和检查看起来像域名的字符串。”,RFC 6125
注:对于的“正确”值,我不太确定keyUsage


2
见我关于这个问题的笔记;此答案中的config无效,因为*.*.example.com它无效(您不能有多个*s);c / p-ers谨防。
Thanatos

req_distinguished_nameopenssl 1.1.0f不接受空白部分,因此至少必须有空白部分countryName_default(请参考Openssl.conf Walkthru)。
AntonK

12

我遇到了同样的问题,并在此处找到响应:

https://www.citrix.com/blogs/2015/04/10/how-to-create-a-csr-for-a-san-certificate-on-netscaler/

配置文件如下所示:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = www.company.net 
DNS.4 = company.net 

然后:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr

1
这也行得通;我在命令行上指定了主题(因为这对于我的用例来说更简单);这只是将其移动到配置文件。另外,我的问题与OpenSSL有关,抱怨实际上在指定该主题后找不到该主题。
Thanatos

我不确定该解决方案是否有效-在Windows中,它一直在报告“无法在配置中找到专有名称”,尝试了所有方法。
hagubear

1
req_distinguished_name部分可以留空。它的作用是指定所需字段名称的标签模板,该模板可以被-subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xx等覆盖,但是,不要分配这些字段值。
Devy

5

对我来说,此错误似乎是由在Windows Server 2012中运行命令时错误的路径创建引起的, C:\OpenSSL-Win32\bin

openssl req -new -sha256 -key private.pem -out example.csr

在要求通过阶段之前输出非阻塞错误:

无法打开C:\ Program Files(x86)\ Common Files \ SSL / openssl.cnf进行读取,没有文件或目录

显然,由于斜杠的错误,路径无效,因此必须在命令行中显式附加配置文件:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr

这对我有用,干净整洁。非常感谢!
Sossenbinder

尽管这无疑可以解决您的问题,但除了必须执行OpenSSL之外,它与原始问题无关。(作为单独的问题/答案可能会更好。)
Thanatos

这解决了我的问题,“ openssl无法在配置中找到'distinguished_name'”谢谢!
chris313​​89

1

这个类似的错误:

$ openssl req -x509 -newkey rsa:4096 -keyout _key.pem -out cert.pem -days 365 -nodes您将被要求输入将被合并到您的证书请求中的信息。您将要输入的是专有名称或DN。有很多字段,但您可以留空。对于某些字段,将有一个默认值。如果输入“。”,则该字段将保留为空白。-----国家名称(2个字母代码)[AU]:提出证书申请的问题

(Ubuntu 17.04)的意思是“您需要添加

-subj "/C=US/ST=California/L=San Francis co/O=ACME, Inc./CN=*.*.$DOMAIN/"

到命令行” FWIW。


0

另一个可能的问题是特殊的(不可见的)UTF-8字符。使用检查文件

cat -v $OPTIONS_FILE
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.