如何让Let's Encrypt与Cloudflare兼容并恢复网站SSL安全锁?
解决Cloudflare SSL全严格模式下安全锁消失的问题
嘿,我来帮你梳理下这个问题——当你切换到Cloudflare的SSL「全(严格)」模式后,安全锁消失显示信息图标,核心原因几乎都是Cloudflare和你的自有服务器之间的SSL信任链路出了问题,或者页面存在混合内容,和你用不用Let's Encrypt证书完全不冲突,甚至Let's Encrypt是最适合搭配Cloudflare的免费证书之一。下面是一步步的排查和修复方案:
1. 先确认自有服务器的Let's Encrypt证书状态
Cloudflare的「全严格」模式要求它和你的服务器之间的连接必须是完全受信任的SSL连接,所以首先得确保你服务器上的Let's Encrypt证书是正常的:
- 直接通过服务器IP访问
https://你的服务器IP:443(如果有自定义端口就改对应端口),看看浏览器是否提示证书错误; - 也可以用命令行验证:
curl -v https://你的域名 --resolve 你的域名:443:你的服务器IP,看输出里是否有证书信任相关的错误; - 如果这一步有问题,先修复服务器端的证书:
- 检查Let's Encrypt证书是否过期(用
certbot certificates查看状态),过期了就用certbot renew续期; - 确认Web服务(Nginx/Apache)的配置里,正确加载了证书文件(包括完整的证书链,不是只加载单张证书)和对应的私钥;
- 确保证书覆盖了你当前使用的所有域名/子域名。
- 检查Let's Encrypt证书是否过期(用
2. 检查Cloudflare的SSL相关设置
登录Cloudflare控制台,进入你的域名管理页面,重点检查这几个选项:
- SSL/TLS → 加密模式:确认是「全(严格)」模式,不要选其他模式;
- SSL/TLS → 边缘证书:开启「始终使用HTTPS」,强制所有访问跳转到HTTPS;
- SSL/TLS → 源服务器:开启「自动HTTPS重写」——这个功能会自动修复页面里的混合内容(比如HTTP资源链接),是解决信息图标的常见利器;
- DNS解析记录:确保你的主域名A/CNAME记录是橙色云朵状态(开启Cloudflare代理),如果是灰色云朵,Cloudflare的SSL不会生效。
3. 排查混合内容问题
浏览器显示信息图标,最常见的原因之一就是页面加载了HTTP协议的资源(比如图片、JS、CSS、字体等),即使SSL链路没问题,混合内容也会导致安全锁降级:
- 打开浏览器开发者工具(F12),切换到「控制台」标签,看是否有「混合内容」的警告信息;
- 修复方式:
- 把所有HTTP开头的资源链接改成HTTPS;
- 或者用协议相对路径(比如
//example.com/xxx.jpg),自动适配当前页面的协议; - 前面提到的Cloudflare「自动HTTPS重写」也能帮你自动替换这些链接,开启后等几分钟生效。
4. 关于证书的选择:Let's Encrypt + Cloudflare是完美组合
你完全不需要替换Let's Encrypt证书,两者的分工很明确:
- Cloudflare边缘证书:给用户的浏览器看,由Cloudflare自动颁发和维护,覆盖你域名的所有子域名,只要DNS代理开启就会生效;
- 服务器端的Let's Encrypt证书:给Cloudflare和你的服务器之间的连接用,只要保持有效且被信任,就能满足「全严格」模式的要求。
按照上面的步骤排查,基本就能恢复浏览器的安全锁图标了。
内容的提问来源于stack exchange,提问作者Nuru Salihu




