游客发表
浏览器地址栏弹出“不安全”三个字的网址时候,大多数人第一反应是不安变成关掉页面。但如果你是安全网站 owner,这三个字就是网址实打实的流量杀手。Chrome 从 2018 年起对 HTTP 站点直接标“不安全”,不安变成Firefox、安全Safari 跟进,网址用户看到红色警告扭头就走——哪怕你只是不安变成个展示型官网,没任何登录和支付功能。安全
问题的网址根子在于 HTTP 协议本身。数据从你的不安变成服务器到用户浏览器之间走的是明文,中途任何一个节点都能截获、安全篡改。网址运营商插广告、不安变成公共 WiFi 抓密码,安全都是这么来的。要解决这件事,唯一的办法是上 HTTPS,也就是给 HTTP 套一层 TLS 加密。
以前搞 HTTPS 要花钱买证书,一年几百到几千不等。现在没必要了。Let's Encrypt 从 2015 年开始提供免费 DV 证书,90 天有效期,到期自动续签。DV 证书只验证域名所有权,不验证企业身份,但对绝大多数网站来说够用。浏览器地址栏会显示锁标志,不会标“不安全”。
如果你用的是云服务商,比如阿里云、腾讯云、Cloudflare,它们都提供一键申请免费证书的功能。Cloudflare 更省事——你把域名 DNS 切过去,它自动帮你签发证书并配置好,源站甚至可以不碰证书。代价是所有流量走 Cloudflare 中转,免费版有速率限制。
以 Nginx 为例。拿到证书文件(通常是 .crt 和 .key)后,在配置文件里加一段:
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.crt; ssl_certificate_key /path/to/cert.key; ... } 然后加一个 80 端口的跳转,把所有 HTTP 请求 301 到 HTTPS:
server { listen 80; server_name example.com; return 301 https://$host$request_uri; } 重载 Nginx,地址栏的锁就出来了。Apache 配置逻辑类似,SSLCertificateFile 和 SSLCertificateKeyFile 两个指令搞定。
有个坑很多人踩过。主页面走了 HTTPS,但页面里引用的图片、JS、CSS 还是 HTTP 地址。浏览器会认为页面“部分加密”,锁标志可能变成灰色或者带警告三角。打开开发者工具 Console,会看到一堆 Mixed Content 报错。
解决办法是把页面里所有资源引用改成 HTTPS 或者协议相对地址(//example.com/img.jpg)。WordPress 站点可以用 Better Search Replace 插件批量替换数据库里的 http://。静态站点直接全局搜索替换就行。
还有一个容易忽略的地方:如果用了 CDN,CDN 回源那一段可能还是 HTTP。Cloudflare 的 Flexible SSL 模式就是这种——用户到 CF 是 HTTPS,CF 到源站是 HTTP。这等于没加密,只是骗过了浏览器。改成 Full 或 Full (Strict) 模式才行。
301 跳转有个问题:用户第一次访问 http://example.com 时,请求先明文发出去,服务器才返回跳转。中间人可以在跳转发生前就劫持。HSTS(HTTP Strict Transport Security)解决这个——服务器返回一个 Strict-Transport-Security 头,浏览器记住这个域名以后只用 HTTPS,连跳转那一步都省了。
Nginx 里加一行:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; max-age 设一年。但注意,一旦设了 HSTS,在过期之前用户浏览器会强制 HTTPS,如果证书过期没续上,网站直接打不开。所以先把自动续签跑通再上 HSTS。
Let's Encrypt 证书 90 天到期。手动续签迟早会忘。Certbot 可以配 cron 定时任务自动续:
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx" Cloudflare 的源站证书有效期 15 年,不用操心续签,但只在你用 Cloudflare 代理时有效。如果哪天关了代理,证书立刻失效。
说到底,HTTP 到 HTTPS 不是什么高深技术。免费证书、自动化工具、云服务商的一键配置,门槛已经很低了。真正的问题往往是懒——觉得“我的小站没人攻击”。但浏览器标“不安全”这件事,跟有没有人攻击你无关,它影响的是每一个访问者的第一印象。
友情链接