微信浏览器报“证书不可信”主因是Apache证书链不完整,需将域名证书与中间证书按序合并为单个PEM文件(域名证书在前、中间证书在后、根证书不包含),并在SSLCertificateFile中指向该文件,同时禁用旧TLS协议与弱加密套件。
微信浏览器(尤其是安卓版)报“该证书并非来自可信赖的授权中心”,90%以上是 apache 证书链不完整导致的。它不像 chrome 那样会尝试自动补全中间证书,而是严格校验服务端是否一次性发送了完整的信任链——从你的域名证书,到中间 ca,再到根证书(根证书本身不发,但中间证书必须能连到预置根)。解决关键就两点:合并证书顺序正确、配置指向唯一文件。
确认并补全中间证书链
只放 your_domain.crt 是不够的。必须把中间证书追加进去:
- 去证书颁发商官网下载对应中间证书(如 Let’s Encrypt 要用
R3.crt或fullchain.pem中除私钥外的部分) - 用文本编辑器打开你的域名证书(
your_domain.crt),在末尾换行,粘贴中间证书内容(PEM 格式,以-----BEGIN CERTIFICATE-----开头) - 不要添加根证书(如 ISRG Root X1),手机系统已内置,加了反而可能干扰
- 保存为新文件,例如
your_domain_full.crt
Apache 配置只用一个 SSLCertificateFile
确保 HTTPS 虚拟主机内只使用 SSLCertificateFile 指向你刚合并好的那个文件,不要同时配 SSLCertificateChainFile:
- 删掉或注释掉旧的
SSLCertificateChainFile行 - 保留且仅保留:
SSLCertificateFile /path/to/your_domain_full.crt -
SSLCertificateKeyFile仍单独指向私钥(.key文件) - 每个
<virtualhost></virtualhost>块都必须独立配全这三要素(SSLEngine on、证书、私钥)
验证是否生效
改完配置后重载 Apache,并用工具快速验证:
- 执行
apachectl configtest确保语法无误,再systemctl reload apache2(或httpd) - 访问 myssl.com 输入你的域名,重点看「证书链」是否显示 完整,且「根证书」一栏显示受信任(如 ISRG Root X1)
- 真机用微信浏览器直接访问,不再弹红字警告即成功
不复杂但容易忽略:手机端不缓存、不妥协,只认一次给全的链。



















