安卓设备SSL证书链验证更严格,需在Nginx中配置完整证书链(域名证书+中间证书,不含根证书),通过openssl或在线工具检测链完整性,并正确拼接、配置fullchain.crt文件后重载Nginx。

安卓设备对SSL证书链的验证比iOS或桌面浏览器更严格,如果Nginx配置中只提供了站点证书而未包含中间证书(即证书链不完整),很多安卓版本(尤其是Android 7.0+)会直接报错“NET::ERR_CERT_AUTHORITY_INVALID”或连接失败。解决的关键是确保Nginx发送完整的证书链——即站点证书 + 所有必要的中间证书(不含根证书)。
确认证书链是否完整
用OpenSSL命令快速检测:
openssl s_client -connect your-domain.com:443 -showcerts观察输出中是否返回了2个或更多CERTIFICATE段(第一个是你的域名证书,后续应为中间证书)。若只看到一个,说明链不完整。也可用在线工具如 SSL Checker 验证,重点关注“Certificate Chain”是否显示“OK”。
正确拼接证书文件(关键步骤)
Nginx的 ssl_certificate 指令要求将域名证书和中间证书按顺序合并到同一个PEM文件中,顺序必须是:
- 第一部分:你的域名证书(例如
your-domain.crt) - 第二部分:中间证书(例如
intermediate.crt;如有多级,按信任链从近到远追加) - 不要包含根证书(Root CA)——安卓不信任用户主动添加的根证书,且Nginx也不需要它
执行合并命令:
cat your-domain.crt intermediate.crt > fullchain.crt在Nginx中正确配置
修改站点配置(通常在 /etc/nginx/sites-enabled/ 或 conf.d/ 下),确保使用合并后的证书文件:
server {
listen 443 ssl http2;
server_name your-domain.com;
<pre class="brush:php;toolbar:false;">ssl_certificate /path/to/fullchain.crt; # ✅ 不是 your-domain.crt 单独文件
ssl_certificate_key /path/to/your-domain.key;
# 其他SSL配置(可选但推荐)
ssl_trusted_certificate /path/to/fullchain.crt; # 用于OCSP stapling等
ssl_stapling on;
ssl_stapling_verify on;}
配置完成后务必重载Nginx:
nginx -t && systemctl reload nginx验证安卓端是否修复
清除安卓浏览器缓存(Chrome中进入 chrome://net-internals/#hsts 删除域名HSTS记录),或换用无痕模式访问。更可靠的方式是用安卓终端执行:
应能看到至少两个Subject字段(你的域名 + 中间CA名称)。也可安装“SSL Server Tester”类App进行图形化验证。

















