在安装了 Windows 10 的电脑上,我必须使用 OpenSSL。我已经下载了 1.0.2n 版并遵循了本指南:Creating an SSL Certificate with Multiple Hostnames我修改了 openssl.cfg 配置文件(位于 C:\OpenSSL-Win64\bin)。
经过一些测试,我可以毫无问题地生成密钥和证书。
我的问题如下:我对证书生成的指示是,主题备用名称必须只有 1 个值,并且必须与通用名称字段匹配。因此,如果(填写证书)我用example.com填写 commonName 字段,那么主题备用名称也必须是example.com。我知道我可以每次更改 cfg 文件并在 v3-req 部分手动设置 SAN 的值,但我想避免这种情况;我正在寻找一种方法来复制我在 SAN 字段中提示输入通用名称的值。
所以,我尝试了这个:在 openss.cfg 文件中,我转到了 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 = commonName:copy
Run Code Online (Sandbox Code Playgroud)
也就是说,我试图利用 :copy 功能,但不幸的是,此操作不起作用。如果在证书生成后,我启动命令
req -text -noout -in <filename.csr>
Run Code Online (Sandbox Code Playgroud)
为了验证我的证书,在特定部分我得到了这个:
X509v3 Subject Alternative Name:
DNS:commonName.copy
Run Code Online (Sandbox Code Playgroud)
如您所见,输出是我在该[alt_names]
部分下的声明的右侧。
所以,问题是:是否有一种方法可以将 commonName 继承到主题备用名称?如果是,如何?
使用${section::name}
读取先前定义的变量。
这是一个有效的例子:
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_dn
req_extensions = req_ext
[ req_dn ]
# Or traditional org style:
countryName = gb
organizationName = example
commonName = acme.example.test
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${req_dn::commonName}
DNS.2 = alt.example.test
Run Code Online (Sandbox Code Playgroud)
其次是:
openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf
Run Code Online (Sandbox Code Playgroud)
这导致:
openssl req -noout -text -in test.csr
Run Code Online (Sandbox Code Playgroud)
给予:
...
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:acme.example.test, DNS:alt.example.test
Signature Algorithm: sha256WithRSAEncryption
92:1c:e0:0e:6d:7d:2e:b4:64:c5:ab:ff:6a:37:dd:35:98:58:
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3874 次 |
最近记录: |