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

Dar*_*ter 2 ssl https command-line openssl ssl-certificate

从最新的 Chrome 60+ 开始,如果没有 SAN,它会在 HTTPS 页面上抛出 ERROR。OpenSSL 命令行不添加这些扩展。

Dar*_*ter 6

没关系,自己想办法。

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
# ...
Run Code Online (Sandbox Code Playgroud)

这些 [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 
Run Code Online (Sandbox Code Playgroud)

.crt在 Windows 10 中将此文件添加为受信任的根证书颁发机构,重新启动 Chrome 和 Web 服务器,瞧。

如果您担心 HTTP 事务中的性能,您可以更改rsa2048位。


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

/sf/answers/1504613841/