打开Chrome,谷歌地址栏敲下回车,浏览拦截屏幕上却弹出一块红色警告页——"您的器网连接不是私密连接",下面一行小字写着NET::ERR_CERT_DATE_INVALID。页被这不是谷歌中毒,也不是浏览拦截网络断了。十有八九,器网是页被SSL证书出了问题。
我上周就撞上了这事。谷歌公司内部的浏览拦截一个管理后台,前一天还好好的器网,第二天整个团队都打不开。页被有人以为是谷歌VPN挂了,重启了三回;有人怀疑是浏览拦截DNS污染,换了公共DNS照样报错。器网折腾了一上午,最后发现是那张证书在凌晨过期了。就这么简单,也就这么容易被忽略。
Chrome的拦截逻辑其实不复杂。它手里有一份"受信任根证书列表",每次你访问HTTPS站点,浏览器会检查对方出示的证书:是不是受信任机构签发的、域名对不对得上、有没有过期、有没有被吊销。任何一项不通过,它就翻脸。
这套机制本身是好事。没有它,中间人伪造一个银行网站你根本看不出来。但问题是,Chrome这几年把安全策略收得越来越紧,很多"其实没那么危险"的情况也被一刀切了。
比如企业内网自签证书。IT部门自己签的证书,浏览器不认,因为签发者不在受信任列表里。以前用户点一下"继续前往"就能绕过,Chrome 从某个版本开始把这个选项藏得越来越深,后来干脆在某些情况下直接取消。你只能看着那个红色页面干瞪眼。
证书过期是最常见的。Let's Encrypt的免费证书有效期只有90天,忘了续期就等着报错。我自己搭的一个小站就因为这个挂过,自动续期脚本跑失败了,没注意,三天后访问量掉了一半。
混合内容拦截也很烦人。页面本身是HTTPS,但里面加载了一张HTTP的图片或者一段HTTP的脚本,Chrome会直接拦掉这部分内容。有时候页面看起来正常,但某个功能死活不工作,打开控制台一看,一堆"Mixed Content"的报错。
HSTS强制跳转是另一个坑。如果某个域名之前告诉过浏览器"以后只用HTTPS访问我",浏览器就记住了。哪怕你后来把服务器改回HTTP,浏览器也不听,硬生生把请求转成HTTPS,然后连接失败。这个记录存在本地,清除起来还挺麻烦。
看到拦截页面,先别急着关。点"高级"展开详细信息,Chrome会告诉你具体原因。是证书过期就去续期,是自签证书就手动导入信任,是混合内容就去改页面里的资源引用。
命令行工具也能帮忙。openssl s_client -connect example.com:443 能看到服务器返回的完整证书链,包括有效期和签发者。比在浏览器里翻来翻去快得多。
企业环境里,IT部门通常会用组策略推送自签根证书到每台机器上。如果你在家办公连不上内网系统,大概率是这台电脑没装公司的根证书。找IT要一份,导入系统证书存储区,Chrome就老实了。
说句实在话,Chrome的安全策略确实保护了普通用户,但对开发者和运维人员来说,有时候真的挺碍事。理解它的判断逻辑,比每次都去网上搜"Chrome打不开怎么办"要管用得多。