我收到以下错误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
Run Code Online (Sandbox Code Playgroud)
我的理解是,这是它找不到的“主题”……但是,我要说明的是:
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"
Run Code Online (Sandbox Code Playgroud)
手册的唯一建议是配置文件不存在;我可以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
Run Code Online (Sandbox Code Playgroud)
...这几乎就是文档中的示例。
我在这里做错了什么?
Tha*_*tos 40
据我所知,-config
正在覆盖某种内部配置;如果您看到openssl req 手册页的“示例”部分,它会显示其中包含配置文件的示例distinguished_name
。凭直觉,我在配置中添加了以下内容:
[req]
…
distinguished_name = req_distinguished_name
[req_distinguished_name]
# empty.
Run Code Online (Sandbox Code Playgroud)
因此,我的整个配置看起来像
[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}
Run Code Online (Sandbox Code Playgroud)
(请注意,这里${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"
Run Code Online (Sandbox Code Playgroud)
在这篇文章中,我的理解是 X.509 证书不推荐使用 SHA-1,因此-sha256
(这是一个未记录的标志......),并且 subjectAltName 变得必需²,因此需要配置。为了生成上述最佳实践 CSR,我所知道的唯一额外问题是您应该使用至少 2048 位的 RSA 密钥大小(如果您使用的是 RSA,我就是这样);您必须指定openssl genrsa
命令的大小,因为当前默认值是不安全的。
¹虽然在我写这篇文章的时候还没有崩溃,但人们认为这只是时间问题。参见“逐渐淘汰SHA1”
²不再推荐使用CN作为域名;我不确定浏览器何时/是否打算弃用此功能。“不要在主题的通用名称中包含和检查看起来像域名的字符串。”,RFC 6125
注意:我不太确定keyUsage
.
小智 18
我遇到了同样的问题,并在这里找到了回应:
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
Run Code Online (Sandbox Code Playgroud)
进而:
openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr
Run Code Online (Sandbox Code Playgroud)
小智 5
对我来说,这个错误似乎是由于在 Windows Server 2012 中运行命令时路径创建不正确造成的, C:\OpenSSL-Win32\bin
openssl req -new -sha256 -key private.pem -out example.csr
Run Code Online (Sandbox Code Playgroud)
在要求 pass phare 之前输出非阻塞错误:
无法打开 C:\Program Files (x86)\Common Files\SSL/openssl.cnf 进行读取,没有这样的文件或目录
显然,由于斜杠错误,路径无效,因此必须在命令行中显式附加配置文件:
openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
114412 次 |
最近记录: |