我得承认我是个SSL重度依赖者,上网总会下意识地把URL里的http后随手加个s——我打URL时从来都是从不厌其烦手动写上协议名称的,发送表单——尤其是用户名密码什么的——看到目的URL不是https的总觉得像被人剥光了一样,家里机器时不时地打开着就为了用putty做个tunnel,方便在公司访问一些没SSL支持又敏感的站点、服务etc.。
可惜啊,今天被彻底地打击了,竟然有人会想到这么明目张胆地强奸下SSL。
我得感谢firefox这些不鸟Internet设置里那些CA证书的应用程序,类似的程序还包括thunderbird以及伟大的,那个,SUN
JRE。早晨来到公司,就发现没有关掉的ff里跳出N多错误提示框说mail.google.comwww.google.comapi.delicious.com这些站点的证书有问题。刚开始还觉得是firefox受不了这一夜的孤独又出问题了。可是因为装了那个Perspectives扩展,这种情况下看证书也比较方便,就顺手看了看,结果被……不知道”雷”这个动词适合不适合这个情景……证书的颁发机构是一个很陌生又很熟悉的名字:说陌生是因为长这么大没见过这个CA,说熟悉是因为每个工作日都能看到这个名字。”咦?难道经济危机时做CA有助于增加收入么?”于是,先ping下这几个域名,确认一下DNS没被f*ck掉,check;然后请出openssl
s_client,确认一下ff没有脑残能把证书都搞错,check。那接下来就是标准国骂了:谁(TMD)动了我的SSL会话?!
为了鄙视下Windows + IE组合,我当然得拿出来最新最NB的IE8试试。结果,果然没问题,所以理论上我刚看到的那个山寨CA肯定已经存在于这鸟Windows
XP里了,理论上我还得查一下internet属性来确认一下,当然最后也很明了:我是在域控的关怀和照料下茁壮成长的,所以这鸟XP里出现几个我不认识的山寨CA,还真没法让我吃惊。
好在大部分应用程序还都是靠谱的,看到这种山寨CA还都是会报错说未知CA的。不过这么一折腾,所有本地跑来测试的java程序都没法跟外网服务器建立SSL连接了。还好我比较有前瞻性,早就着手验证这事儿,赶紧发的信给大家说了下怎么让JRE容忍这几个山寨CA。
我在想一个情景:一个恶意站点,因为一直脑残,用的是伪造的、自认证之类的SSL证书,所以无人问津;某个同事不幸地点了别人发的一个URL,正是这个脑残恶意站点,本来这种情况下是会提示证书错误的,结果现在因为根CA被篡改成某山寨CA,而且这山寨CA还是受信的,那这下子连证书错误都不会提示了,IE很高兴……当然也许这SSL篡改程序还没脑残到这程度吧,哪天试验下。
好吧,既然这样,上班时间咱就不看Gmail和Google
Reader了。既然(有可能)人家觉得员工看这些是浪费时间,我就发挥前辈徒手造解放大卡的精神闷头干活吧。