如何将 commonName 继承为主题备用名称

如何将 commonName 继承为主题备用名称

在安装了 Windows 10 的电脑上,我必须使用 OpenSSL。我已下载版本 1.0.2n 并遵循以下指南:创建具有多个主机名的 SSL 证书我修改了openssl.cfg配置文件(位于C:\OpenSSL-Win64\bin)。

经过一些测试,我可以毫无问题地生成密钥和证书。

我的问题如下:我对证书生成的指示是这样的主题备用名称必须只有一个值,并且必须与通用名称字段。因此,如果(填写证书)我使用以下方式填写 commonName 字段示例.com,主题备用名称也必须是示例.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

也就是说,我尝试利用 :copy 函数,但不幸的是,这个操作不起作用。如果在生成证书后,我启动命令

req -text -noout -in <filename.csr>

为了验证我的证书,在特定部分我得到了这个:

X509v3 Subject Alternative Name:
    DNS:commonName.copy 

如您所见,输出位于该部分下的我的声明的右侧[alt_names]

因此,问题是:是否有方法可以将 commonName 继承为主题备用名称?如果有,如何继承?

答案1

用于${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

其次是:

openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf

其结果是:

openssl req -noout -text -in test.csr 

给予:

 ...
    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:
 ...

相关内容