2008年4月9日水曜日

さくらインターネットとimapとopensslとwl

WanderlustでさくらインターネットのIMAPサーバにSSLで接続。

これまでは、.wlに、
(setq ssl-certificate-verification-policy 1)
と書いていたけど、誤魔化しているようで嫌だったので証明書を取り込むことにした。

SSLのネゴシエーションのパケットをWiresharkでキャプチャしたら、
Protocol: TLSv1
Info: Certificate
のレコードに証明書が二つ含まれていたので、それぞれバイナリで保存した。

保存した二つの証明書を、opensslコマンドでBase64エンコード
$ openssl base64 -in sakura-1.bin -e -out sakura-1.pem
$ openssl base64 -in sakura-2.bin -e -out sakura-2.pem

sakura-*.pemの最初と最後に
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
を追加した。

ちなみに、この証明書のフォーマットはX509形式で、Base64で符号化したものをPEMというらしい。
PEM以外にも符号化の種類によって、DERとかあるみたい。

この2つのPEMを'hash format'のディレクトリに置くべく、
$ cp sakura-1.pem /path/to/certdir/
$ cp sakura-1.pem /path/to/certdir/
$ c_rehash /path/to/certdir/
とやった。

そのあと、
$ openssl s_client -host hostname.sakura.ne.jp -port 993 -verify 0 -CApath /path/to/certdir

Verify return code: 0 (ok)
となっている事を確認。

最後、wlからopensslを使うときの証明書ディレクトリを指定して完了。
(custom-set-variables
'(ssl-certificate-directory "/path/to/certdir/"))


2008/8/28 追記
証明書ディレクトリは
(custom-set-variables
'(ssl-certificate-directory "/path/to/certdir/"))

じゃなくて、
(setq ssl-certificate-directory "/path/to/certdir/")

って形で.wlにフルパスで定義した方が良さそう。