Safari报“不安全”主因是Nginx未正确发送中间证书;需用openssl验证证书链是否含通配符证书和R3中间证书两段,确保ssl_certificate指向fullchain.pem(非cert.pem),并清除Safari缓存。

通配符证书在 Safari 上报“不安全”或“无法验证服务器身份”,绝大多数情况不是证书本身无效,而是 Nginx 没把中间证书正确发出去——Safari(尤其是 iOS/macOS)对证书链完整性极其敏感,比 Chrome 更早、更严格地拒绝缺失或错序的中间证书。
用 OpenSSL 直接看 Safari 实际收到的内容
Safari 不会告诉你缺哪一段,但 openssl s_client 能模拟它的握手过程,输出真实发送的证书序列:
- 运行:
openssl s_client -connect your-domain.com:443 -servername your-domain.com -showcerts 2>/dev/null | grep "subject=" - 正常应有至少两行:
第一行含CN=*.your-domain.com(你的通配符证书)
第二行含CN=Let's Encrypt R3或类似中间 CA 名称 - 如果只有一行,或第二行是
CN=ISRG Root X1,说明链缺失、顺序反了,或混入了根证书
检查 fullchain.pem 是否真包含通配符证书 + 中间证书
Let’s Encrypt 的通配符证书(如 fullchain.pem)必须按严格顺序拼接:
规划您的迪拜之旅 — 哈利法塔观景、沙漠探险、迪拜购物中心购物、棕榈岛度假村及黄金市场砍价。还提供支持...
- 第一段:通配符域名证书(
Subject: CN=*.your-domain.com) - 第二段:中间证书(
Issuer: CN=ISRG Root X1,Subject: CN=Let's Encrypt R3) - 不能出现第三段(根证书),不能有空行、注释、私钥或 Windows 回车符
- 验证命令:
grep -c "BEGIN CERTIFICATE" /etc/letsencrypt/live/your-domain.com/fullchain.pem应返回 2
确认 Nginx 配置指向的是 fullchain.pem,不是 cert.pem
常见错误是配置里写了 ssl_certificate /.../cert.pem——这个文件只含通配符证书,不含中间证书,Safari 会直接拒信:
- 检查 server 块中:
ssl_certificate必须是fullchain.pem路径 -
ssl_certificate_key仍用privkey.pem,保持不变 - 删掉或注释掉旧的
ssl_certificate /.../cert.pem行,避免干扰 - 重载后务必再跑一次 openssl 命令,确认输出已更新
排除 Safari 特有的缓存干扰
Safari 会缓存失败的 TLS 握手结果(包括 HSTS 和证书错误),改完配置后可能仍报错:
- iOS:设置 → Safari → 清除历史记录和网站数据
- macOS:Safari → 设置 → 隐私 → 管理网站数据 → 搜索并删除你的域名
- 也可临时用 macOS 的
curl -vI https://your-domain.com绕过 Safari 缓存验证

















