咱们聊这个事儿,先打个比方。网站认证就像是你去一家 bekende 连锁店吃午饭,你得先出示好饭卡,这饭卡证明你花钱买的,也代表你有权吃。通用的浏览器比如 Chrome 要么 Safari,不管你是用 iPhone 还是安卓手机,要么是在安卓手机上装个浏览器,它们内部的“身份证”(叫 Certificate 或 Keychain)里,早就偷偷存好了那些证书。
这就好比你不管在哪吃,只要那张饭卡亮着,系统就知道,这吃的是你买来的,不是黑社会新开的店。 故此,从纯技术逻辑来讲,网站要能正常跟浏览器对话、显示网页,这个证书实际上是务必挂载在服务器上的,不然浏览器直接就把页面给挂了。但这玩意儿并不只存有于服务器这个物理空间里。你手机里的缓存,就是那个云端备份库。
要是你手动把服务器上的证书删了,要么手动把证书密钥从手机里去掉了,浏览器里的缓存就会瞬间空出来。
这时候,你再打开网页,浏览器就会提示:证书验证黄了,要么显示那个滚烫的叉号。
这就像你找了一个没锁的保险柜,别看钥匙还在你口袋里,但门是锁死的,进去就得被回绝,哪怕里面全是你的财宝。 故此,要是你是想让别人(特别是那些需求访问公司系统、要么揪心数据保险的伙伴)通过认证,那网站务必供给证书。但要是你自己只是想用个好办的网页发一个通知,比如“今天天气不错”,那理论上你就连不需求确实挂载一个复杂的根证书或中级证书,浏览器也能通过“只读”模式去读取那些公共的、不依赖你个人密钥的证书。
不过这种“裸”情况下的认证,浏览器依然会验证你网站的“主体身份”是否真存有,而不是单纯查验你手里的证书。 这就引出了一个有趣的矛盾:浏览器默认是“清洁”的,它不会帮你把那个费事的证书“装”进你自己的手机。
这意味着,要是你是个人用户,想让自己的手机自动通过特定网站的认证,你肯定不中。你务必去浏览器设置里,手动把那个证书“导入”到你的 Keychain 里。
这就好比你想让手机自动把那张饭卡换成你个人的饭卡,但饭卡本身是印在别人店里的。你得自己动手,去开个店,要么找个店帮你装。 那要是这都不算呢?市面上确实有那种叫“无证书网站”要么“伪证书”的网站。它们看起来跟一般/平平网站一模一样,只要你随意点个链接,浏览器就自认“这网站可信”,直接给你上网页。
这种网站一般出目前搜索引擎的搜索结局堆里,要么一些不知名的论坛。但它们有个致命弱点:一旦你换了个浏览器,要么换了根证书,要么换了个 Android 系统,这些“伪证书”瞬间就失效了。
这就好比你在一家路边摊吃到了真香的手抓羊肉,但那是用假羊肉做的。
要是你去那家摊子,老板告诉你:“哎呀,我目前把假羊肉换成了真羊肉,这羊肉能给你肉味。”你信了吗?这招在海鲜市场是通用的。 故此,结论实际上挺好办的。
要是你的目标是“让任何人访问你的网站”,并且希望你的网站在各种设备上都能稳定运行,那务必做。
这是系统层面的刚需,浏览器会主动去服务器“打听”证书,登堂入室。
要是你只是想让特定人访问,要么想让个人设备“默认”通过,那是极不切实际的,出于浏览器不会帮你做这个动作,你务必自己去配置那个证书。 再说说数据层面,这种“伪证书”确实能骗过浏览器,但成本极高。维持一个服务器、一套 Keychain、一个复杂的 DNS 解析,再加上那个“伪装”的操作,费用要多少多少美元。对于个人开发者要么一般/平平网站来说,这笔账算不过来。并且,浏览器目前越来越智慧,它不像那会儿那样随意就认个证书,它会去查这个证书的谢恩状(Revocation List),去查这个证书的签发机构有没有跑路要么啥时候倒闭。
那些“伪证书”也是如此干的,它们不仅不谢恩,还时常跑路。
故此,用这种手段“骗”过浏览器,对于彻底保险来说,等于自掘坟墓。 那有没有啥折中的办法?也就是不用自己装证书,让浏览器自动帮你装?在苹果生态里,系统自带的证书管理员准你导入证书,但依然需求人工操作。在安卓系统里,别看也有证书管理,但同样需求手动导入。Windows 上倒是相对好办点,出于它是内核级的,证书管理器里直接就能看到所有证书,只要把那个证书文件复制到系统目录里,系统就会自动把它“安装”到 USB 接口上,浏览器打开网页时就能自动验证。但这依然不是“自动”的,它需求你手动把文件放好,浏览器再去“认领”它。 故此,归根结底,网站认证不是“选”的,是“做”的。浏览器不会像某些旧指南里说的那样,让你勾选复选框就OK。它默认是盲目标,不知道你要给它装个啥。
要是你不想让它去服务器,也不想让它去验证,那唯一的出路,就是自己把证书装进去,要么自己把“伪证书”做得充足逼真,让它看起来和确实没两样。但要是是为了真正的保险和通用性,那就别拿“伪证书”去博眼球了,直接老老实实挂载个证书,让浏览器自己去把开往网站的车票核验清楚,这才是正道。