我已经生成了带有别名服务器和 IP 地址的主题备用名称的自签名证书。我已将证书导入 Windows 受信任的证书颁发机构。Chrome 接受来自 SAN 的 URL 证书,但拒绝主题中所述的 URL。
OpenSSL:
openssl req -x509 -newkey rsa:4096 -sha256 -days 999 -nodes \
-keyout nginx.key -out nginx.crt -subj '/CN=www.X.eu' \
-extensions san \
-config <(echo '[req]'; echo 'distinguished_name=req'; echo '[san]'; echo 'subjectAltName=DNS:X.eu,DNS:re1.X.eu,DNS:10.105.1.11')
证书:
Subject: CN = www.X.eu
Subject Alternative Name:
DNS Name=sandbox.X.eu
DNS Name=re1.X.eu
DNS Name=10.105.1.11
此 URL 失败并显示“此站点缺少有效的受信任证书 (net::ERR_CERT_COMMON_NAME_INVALID)”。
https://www.X.eu/favicon.ico
Chrome 接受此网址:
https://re1.X.eu/favicon.ico
问题出在哪里?
在 HTTPS 中,CN 字段不与 subjectAltName 合并 - 相反,当 SAN 扩展包含任何域时,它会被完全忽略。因此,无论您在 CN 中拥有什么域,都必须将其添加到 SAN。
事实上,您甚至可以完全从主题中省略 CN,因为所有 TLS 客户端都支持 SAN。
RFC 2818:HTTP Over TLS,第 3.1 节“服务器身份”: