在JavaScript / HTML中,Chrome报错此服务器无法证实它就是xxxxx - 它的安全证书没有指定主题备用名称
服务器的的ip地址是192.168.3.71,并且服务器没有域名,客户端是用ip访问服务器。客户端的浏览器提示:此服务器无法证实它就是 192.168.3.71 - 它的安全证书没有指定主题备用名称。该如何解决。
当客户端通过IP地址(如 192.168.3.71
)访问服务器时,浏览器提示 “安全证书没有指定主题备用名称(Subject Alternative Name, SAN)”,这是因为现代浏览器(如Chrome)要求SSL证书必须明确包含IP地址或域名在SAN字段中,仅依赖传统的 Common Name (CN) 已不再被接受。
以下是具体解决方案:
1. 生成支持IP地址的SSL证书
方法1:使用OpenSSL手动生成(推荐)
-
创建证书配置文件(如
ssl.conf
):[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn x509_extensions = v3_req[dn] CN = 192.168.3.71 # 可填写IP或任意名称(不重要)[v3_req] keyUsage = keyEncipherment, dataEncipherment, digitalSignature extendedKeyUsage = serverAuth subjectAltName = @alt_names[alt_names] IP.1 = 192.168.3.71 # 必须包含实际访问的IP地址
-
生成证书和私钥:
openssl req -x509 -newkey rsa:2048 -nodes -keyout server.key -out server.crt -days 3650 -config ssl.conf -extensions v3_req
server.key
: 私钥文件server.crt
: 证书文件
方法2:快速命令行生成(无配置文件)
openssl req -x509 -newkey rsa:2048 -nodes -keyout server.key -out server.crt -days 3650 -subj "/CN=192.168.3.71" -addext "subjectAltName=IP:192.168.3.71"
-addext
参数直接指定SAN扩展字段。
2. 配置服务器使用新证书
将生成的 server.crt
和 server.key
配置到Web服务器中:
-
Nginx示例:
server {listen 443 ssl;ssl_certificate /path/to/server.crt;ssl_certificate_key /path/to/server.key;# 其他配置... }
-
Apache示例:
<VirtualHost *:443>SSLEngine onSSLCertificateFile /path/to/server.crtSSLCertificateKeyFile /path/to/server.key# 其他配置... </VirtualHost>
3. 在客户端安装证书
-
导出证书文件(
server.crt
)并发送到客户端。 -
将证书导入客户端受信任的根证书颁发机构:
-
Windows:
- 双击
server.crt
→ 选择“安装证书” → 存储位置为“本地计算机” → 选择“受信任的根证书颁发机构”。
- 双击
-
macOS:
- 双击
server.crt
→ 钥匙串访问中选择“系统”钥匙串 → 右键证书选择“始终信任”。
- 双击
-
Linux:
sudo cp server.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
-
4. 清除浏览器缓存并验证
- 清除HSTS缓存:
- 访问
chrome://net-internals/#hsts
→ 在“Delete domain security policies”输入192.168.3.71
并删除。
- 访问
- 强制刷新页面:
- 按
Ctrl + Shift + R
(Windows)或Cmd + Shift + R
(macOS)。
- 按
- 检查证书详情:
- 在Chrome中点击地址栏的“🔒”图标 → 查看证书,确认SAN字段包含
IP Address: 192.168.3.71
。
- 在Chrome中点击地址栏的“🔒”图标 → 查看证书,确认SAN字段包含
5. 其他注意事项
- 自签名证书的局限性:自签名证书需手动信任,适合内部网络。若需公网使用,可申请支持IP地址的公共证书(如DigiCert)。
- 通配IP限制:公共CA通常不签发包含私有IP(如
192.168.x.x
)的证书,自签名是唯一选择。 - 备用方案:若无法修改证书,可在客户端浏览器临时忽略警告(不推荐)。
验证命令
检查生成的证书是否包含SAN字段:
openssl x509 -in server.crt -text -noout | grep -A1 "Subject Alternative Name"
输出应包含:
X509v3 Subject Alternative Name:IP Address:192.168.3.71
完成上述步骤后,Chrome将信任该证书并显示安全连接(🔒)。