服务器的的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
):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地址
-
生成证书和私钥:
bashopenssl 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:快速命令行生成(无配置文件)
bash
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示例:
nginxserver { listen 443 ssl; ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key; # 其他配置... }
-
Apache示例:
apache<VirtualHost *:443> SSLEngine on SSLCertificateFile /path/to/server.crt SSLCertificateKeyFile /path/to/server.key # 其他配置... </VirtualHost>
3. 在客户端安装证书
-
导出证书文件 (
server.crt
)并发送到客户端。 -
将证书导入客户端受信任的根证书颁发机构:
-
Windows:
- 双击
server.crt
→ 选择"安装证书" → 存储位置为"本地计算机" → 选择"受信任的根证书颁发机构"。
- 双击
-
macOS:
- 双击
server.crt
→ 钥匙串访问中选择"系统"钥匙串 → 右键证书选择"始终信任"。
- 双击
-
Linux:
bashsudo 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字段:
bash
openssl x509 -in server.crt -text -noout | grep -A1 "Subject Alternative Name"
输出应包含:
X509v3 Subject Alternative Name:
IP Address:192.168.3.71
完成上述步骤后,Chrome将信任该证书并显示安全连接(🔒)。