如何将SubjectAltNames 添加到私有PKI 中的最终实体证书?

如何将SubjectAltNames 添加到私有PKI 中的最终实体证书?

我们有一个内部/私有 PKI 来颁发证书,因此只有公司的员工才能访问某些子域(例如 admin.example.com)。

这是我们用来生成证书的脚本:

names="john maria foo bar"

for name in $names; do
        echo "$name"
        openssl genrsa -aes256 -out $name.key 2048

        # Creating the certificate signing request
        openssl req -new -key $name.key -out $name.csr

        # Signing the certificate
        openssl ca -in $name.csr -out $name.crt

        # Exporting both the key and the certificate in a p12 file
        openssl pkcs12 -export -clcerts -in $name.crt -inkey $name.key -out $name.p12
        # And now a bit of cleaning
        rm $name.csr
done

该脚本为每个员工生成 .key 、 .crt 和 .p12 文件,然后员工可以将他的 p12 文件添加到他的浏览器(以及公司的 CA 根证书)以访问子域。

但最近,它不再适用于 Chrome,显然已经有更新,我们需要在员工使用的个人证书中包含 SAN(主题替代名称)。

下列的常见问题解答/主题替代名称 (SAN),我修改了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 = admin.example.com
DNS.2 = admindashboard.example.com

但生成的证书不包含 SAN。

我删除了脚本的最后一部分,该部分破坏了 .csr 文件,重新启动脚本并使用以下命令测试了 csr 文件

openssl req -text -noout -in john.csr | grep DNS

在这一点上,自从我得到以来,它似乎有效

DNS:admin.example.com, DNS:admindashboard.example.com

因此。

但是当我用以下命令测试 crt 文件时

openssl x509 -text -noout -in john.crt | grep DNS

我什么也没得到。

我错过了什么吗?

答案1

OpenSSL 仅将请求中的扩展复制到证书(如果已配置)。

该选项在配置文件的部分copy_extensions中调用。[ca]

如果缺少或设置为,none则不会将任何扩展从您的请求复制到您的证书。

如果设置为copy它,将从请求中复制不在证书中的任何其他扩展。

如果设置为copyall它,将复制所有扩展,覆盖证书中的任何扩展。

man ca会告诉你这件事。它还带有警告。如果您使用该命令随意签署任何请求openssl ca,则当设置此选项时;您最终可能会颁发带有扩展名的证书,例如CA:True.首先检查您的请求。

相关内容