在 Perl 裡用 LWP::UserAgent (以及繼承它的模組) 時使用 HTTPS 連線處理 CA 認證...

libwww-perl 裡的 LWP::UserAgent 可以處理 HTTPS,並利用 CA 驗證 public key 是否簽過。在 FreeBSD 下安裝 ca_root_nss 後可以在 /usr/local/share/certs/ 下看到檔案,於是可以這樣用:

#!/usr/bin/env perl
use strict;
use warnings;
use LWP::UserAgent;

INIT {
    my $ua = LWP::UserAgent->new;
    $ua->ssl_opts(SSL_ca_file =>
        '/usr/local/share/certs/ca-root-nss.crt');

    my $res = $ua->get('https://mail.google.com/mail/');
    print $res->content;
}

Debian 或是 Ubuntu 下則是透過 ca-certificates 裝到 /etc/ssl/certs/ 下,並且分成很多檔案,這時候本來的 ssl_opts 就要改成 SSL_ca_path => '/etc/ssl/certs/';

PS:FreeBSD 上因為是單檔,依照 SSL_CTX_load_verify_locations(3) 這邊的說明,沒辦法用 CApath...

網路愈來愈不安全,能自救的方式並不多...

這兩件事情加起來會不會太巧合...

首先是有攻擊者成功利用 Comodo CA 產生 www.google.comlogin.yahoo.comlogin.skype.comaddons.mozilla.orglogin.live.com 的 SSL certificate:「Report of incident on 15-MAR-2011」,雖然被 revoke (撤銷),但是我們知道 revoke 機制極度脆弱:「Revocation doesn't work」。

過沒幾天,有人發現 AT&TFacebook 的流量會流經中國 ISP 的網路設備:「Facebook traffic mysteriously passes through Chinese ISP」。

關於這幾件事情,我們能做的並不多,只能僅可能的做:

接下來就是祈禱了...

所有的手機應用程式都應該要上 SSL (另一個說法,HTTPS)

這是實際用過一堆手機程式後的感想 XD

不覺得直接在捷運台北車站放一個 SSID 與某些公開讓大家免費使用的 Wifi,就可以收集到很多東西嗎...?

另外要注意的是很多便宜的 SSL Certificate 是沒有辦法過 AndroidiPhone 內建瀏覽器的認證的,要買之前先試著找 Demo Site 測試看看會比較保險。據說大多數的 wildcard ssl 都可以過認證,不過這也只是路邊聽來的,測過才是王道...

奇怪,我記得之前有看到有一張表格是列出手機上瀏覽器支援的情況,一時間要找卻找不到了...

單一 IP/Port 多個 SSL Certificate:SNI

SNI 是「Server Name Indication」的縮寫,是 SSL Virtual Hosting 中很重要的一塊。

到目前為止,最主要是卡在 Windows XP 平台的 SSL/TLS 沒有支援,導致使用系統 SSL/TLS Library 的 IE6/7/8 都不支援 SNI。以 gs.statcounter.com 的數據「Top 5 Operating System from Jan 10 to Jan 11」來看,Windows XP 還有 48% 的市占率...

要等到 Windows XP 的市占率夠低後才有機會看到 SNI CDN...