Laravel 8应用部署时出现CloudFlare SSL证书无效报错排查
部署访问触发“Invalid SSL certificate”报错排查方案
核心配置疏漏逐点核对
- 核对证书文件的完整链结构:CloudFlare源站证书的完整信任链需要将域名对应的服务器证书、CF的中间CA证书按顺序拼接为完整的.crt文件,仅单独保存域名段证书会因缺少中间链被浏览器判定为无效。可在服务器执行命令验证:
openssl x509 -in /etc/nginx/ssl/mybabies.app.crt -noout -text
若输出内容中无中间CA的绑定字段,即为证书拼接顺序错误。 - 验证证书与私钥的匹配关系:上传配置时易出现证书与密钥不配套的问题,可分别计算两者的公钥哈希值核对:
提取证书公钥哈希:openssl x509 -noout -modulus -in /etc/nginx/ssl/mybabies.app.crt | openssl md5
提取私钥公钥哈希:openssl rsa -noout -modulus -in /etc/nginx/ssl/mybabies.app.key | openssl md5
两个命令的输出哈希完全一致才为匹配的一对密钥,否则需重新替换文件。 - 修正Nginx SSL监听配置:当前配置中的
listen 443;不符合Nginx SSL配置的规范写法,旧版本Nginx会因未显式声明SSL模式导致握手流程异常,需修改为listen 443 ssl;。
代理暂停场景下的认知误区纠正
- 你当前暂停CloudFlare代理后,用户请求会直接访问源站服务器。这里需要明确:CloudFlare后台生成的源站SSL证书,仅用于CloudFlare边缘节点与源站之间的加密传输,该证书的信任根未被主流浏览器内置信任列表收录,一旦关闭CF代理让用户直连源站,浏览器会直接判定证书无效,这是导致你当前报错的最常见原因。
- 该场景下的两种可选修复路径:
- 恢复CloudFlare站点代理,将SSL加密模式设置为Full (Strict),此时用户浏览器看到的是CloudFlare公网信任的边缘证书,源站通过CF生成的源站证书完成与CF节点的加密传输,不会出现证书无效的报错。
- 若需直连源站调试、不经过CloudFlare代理,需替换为被浏览器内置信任的公共CA签发的证书(如Let's Encrypt免费证书),不要使用CF生成的源站证书作为直连站点的服务证书。
辅助校验细节
- 检查SSL文件的系统权限:Nginx进程默认以
www-data用户运行,需保证证书文件权限为644、私钥文件权限为600,文件属主设置为www-data,权限不足会导致Nginx无法读取密钥文件,触发握手失败。 - 每次修改Nginx配置后,先执行
nginx -t校验语法,确认输出syntax is ok、test is successful后,再执行systemctl reload nginx重载配置,不要忽略语法校验的报错直接重启服务。 - 若私钥为PKCS8格式(文件头为
-----BEGIN PRIVATE KEY-----),部分旧版本Nginx存在读取兼容问题,可执行命令转换为传统RSA格式:openssl pkcs8 -in /etc/nginx/ssl/mybabies.app.key -out /etc/nginx/ssl/mybabies_rsa.key -traditional
替换配置里的密钥路径即可解决兼容问题。 - 补充80端口的跳转配置,避免HTTP请求绕过SSL校验直接访问源站:
server { listen 80; server_name mybabies.app www.mybabies.app; return 301 https://$host$request_uri; }
内容的提问来源于stack exchange,提问作者code-8
相关产品推荐
相关产品推荐

