【发布时间】:2018-02-16 10:18:51
【问题描述】:
从最新的 Chrome 60+ 开始,如果没有 SAN,它会在 HTTPS 页面上抛出 ERROR。 OpenSSL 命令行不添加这些扩展。
【问题讨论】:
标签: ssl command-line https openssl ssl-certificate
从最新的 Chrome 60+ 开始,如果没有 SAN,它会在 HTTPS 页面上抛出 ERROR。 OpenSSL 命令行不添加这些扩展。
【问题讨论】:
标签: ssl command-line https openssl ssl-certificate
没关系,我自己想通了。
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 匹配。像localhost 或app.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
在 Windows 10 中将此 .crt 文件添加为受信任的根证书颁发机构,重新启动 Chrome 和 Web 服务器,然后瞧。
如果您担心 HTTP 事务的性能,可以将 rsa 更改为 2048 位。
这可能仅适用于服务器和浏览器之间的内部测试。如果您需要具有 100% 有效 SSL 证书的更完整和可靠的解决方案,您应该创建一个 CA、一个 CRS,然后使用该 CA 签署 CRS,这将产生一个有效的自签名证书:
【讨论】:
subjectAltName = DNS:your.domain。您还可以将 [ v3_ca ] 部分附加到您的 openssl.cnf 文件的副本;然后将合并多个部分实例。在其他地方的答案中,建议使用参数-extensions ... -extfile ... 作为替代方案。但是,这只适用于openssl ca,而openssl req 不知道-extfile。感谢@DarkGhostHunter,我现在可以在 MacOS 上对我的证书进行自签名,并通过系统证书存储在 Chrome 浏览器中使用它们。