如何使用SAN创建OpenSSL自签名证书?

3
截至最新的Chrome 60+版本,如果没有SAN,则在HTTPS页面上会抛出错误。OpenSSL命令行不添加这些扩展。
1个回答

7

没关系,我自己解决了。

OpenSSL CLI允许使用-subj标志设置有关证书颁发机构(CA)的信息,但是无法通过命令行添加主体备用名称(SAN)。因此,我不得不使用调用-config,然后使用要作为简单配置加载的文件。对于创建自签名证书,这应该足够了,但不适用于生产:

# ./config/tiny_openssl.conf    
[CA_default]
copy_extensions = copy

[req]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = req_distinguished_name
x509_extensions = v3_ca

[req_distinguished_name]
C = US
ST = Washington
L = Seattle
O = My Company
OU = IT Department
emailAddress = it@mycompany.com
CN = mycompany.com

[v3_ca]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alternate_names

[alternate_names]
DNS.1 = localhost
DNS.2 = *.localhost
DNS.3 = app.localhost
# ...
[alternate_names]值必须与由生成的证书在SSL下提供服务的站点(或站点)的url相匹配。例如localhostapp.localhost可以工作。然后,我们使用此配置启动OpenSSL。
$ openssl req -x509 -newkey rsa:4096 -sha256 -utf8 -days 365 -nodes \
    -config ./config/tiny_openssl.conf \
    -keyout ./certificates/private.key \
    -out ./certificates/ssl/certificate.crt 

将这个.crt文件添加到Windows 10中作为受信任的根证书颁发机构,重新启动Chrome和Web服务器,就可以了。

如果您担心HTTP事务的性能,可以将rsa更改为2048位。


这可能仅适用于服务器和浏览器之间的内部测试。如果您需要更完整可靠、100%有效的SSL证书解决方案,则应创建CA、CRS,然后使用该CA签署CRS,这将成为一个有效的自签名证书:

https://dev59.com/sWEi5IYBdhLWcg3wN6Jt#21494483


1
谢谢,这个方法可行 :) 在 Mac 上生成 .crt 文件,像上面那样链接到你的 https ssl 配置中,重启 Apache。然后双击 .crt 文件“添加到钥匙串”,再双击安装的证书并展开“信任”部分,选择“始终信任”,重新启动 Chrome,就可以愉快地使用了。 - kontur
1
以下是我学到的一些经验教训:如果你只有一个域名,你可以使用语法 subjectAltName = DNS:your.domain。你也可以将 [ v3_ca ] 部分附加到你的 openssl.cnf 文件的副本上;多个部分实例将被合并。在其他地方的答案中,建议使用参数 -extensions ... -extfile ... 作为替代方法。然而,这仅适用于 openssl ca,但 openssl req 不知道 -extfile。感谢 @DarkGhostHunter,我现在已经成功在 MacOS 上自签名我的证书,并通过系统证书存储在 Chrome 浏览器中使用它们。 - Richard Kiefer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接