在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手动生成(推荐)
  1. 创建证书配置文件 (如 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地址
  2. 生成证书和私钥

    bash 复制代码
    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:快速命令行生成(无配置文件)
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.crtserver.key 配置到Web服务器中:

  • Nginx示例

    nginx 复制代码
    server {
        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. 在客户端安装证书

  1. 导出证书文件server.crt)并发送到客户端。

  2. 将证书导入客户端受信任的根证书颁发机构

    • Windows

      1. 双击 server.crt → 选择"安装证书" → 存储位置为"本地计算机" → 选择"受信任的根证书颁发机构"。
    • macOS

      1. 双击 server.crt → 钥匙串访问中选择"系统"钥匙串 → 右键证书选择"始终信任"。
    • Linux

      bash 复制代码
      sudo cp server.crt /usr/local/share/ca-certificates/
      sudo update-ca-certificates

4. 清除浏览器缓存并验证

  1. 清除HSTS缓存
    • 访问 chrome://net-internals/#hsts → 在"Delete domain security policies"输入 192.168.3.71 并删除。
  2. 强制刷新页面
    • Ctrl + Shift + R(Windows)或 Cmd + Shift + R(macOS)。
  3. 检查证书详情
    • 在Chrome中点击地址栏的"🔒"图标 → 查看证书,确认SAN字段包含 IP Address: 192.168.3.71

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将信任该证书并显示安全连接(🔒)。

相关推荐
神探小白牙7 小时前
eCharts 多系列柱状图增加背景图
javascript·ecmascript·echarts
雁鸣零落10 小时前
如何在 Chrome 中查看其他浏览器的书签?书签空间订阅与侧边栏只读切换指南
前端·chrome·edge浏览器
雁鸣零落13 小时前
跨浏览器书签怎么在多设备间同步?云加密同步、冲突合并与 VertiTab 完整指南
chrome·edge浏览器
薛定猫AI14 小时前
【深度解析】Gemma Chat 本地 AI 编程 Agent:Electron + MLX + 开源模型的离线 Vibe Coding 实战
javascript·人工智能·electron
全栈前端老曹14 小时前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09
笑虾14 小时前
Win10 修改注册表 让鼠标悬停PNG上时 tip 始终显示分辨率
开发语言·javascript·ecmascript
雾岛听风69115 小时前
JavaScript基础语法速查手册
开发语言·前端·javascript
Dxy123931021615 小时前
HTML 如何使用 SVG 画曲线
前端·算法·html
用户23678298016815 小时前
从零实现 GIF 制作工具:LZW 压缩与 Median Cut 色彩量化
前端·javascript
棉猴15 小时前
Python海龟绘图之绘制文本
javascript·python·html·write·turtle·海龟绘图·输出文本