wanderlust: use gnutls insted of starttls
Created: Thu, May 28 10:55:42 JST 2015Last modified: Thu, May 28 17:31:49 JST 2015
もしも F1 v starttls-use-gnutls あるいは M-x customize-valiable starttls-use-gnutls して、すでに "nil" ではなく "t" になっているならここから先はまったく必要ない。
- wanderlust : http://www.emacswiki.org/emacs/WanderLust
- gnutls (deb) : https://packages.debian.org/search?keywords=gnutls-bin
- starttls (obsolate) : ftp://ftp.opaopa.org/elisp/starttls-0.10.tar.gz
手元では emacs24.5, wl, starttls についてはソースからインストール、gnutls-bin は deb パッケージをインストールしてある。
最近、TLS まわりにインシデントが出てきていろいろと調整していた。いろいろとログを見ていたら手元の wanderlust が LAN 内にある cyrus-imapd に接続に行くときに
starttls: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits new) no authentication
で接続していることに気づいた。
これ、そろそろ TLSv1.2 にしたほうが良いだろう、ということでうろうろしてみた。
starttls.el 自体は Gnus の一部として Emacs 本体に含まれている(emacs-*/lisp/gnus/starttls.el)。そこから先、実際にサーバーとコネクトする部分についてはカスタマイズ可能な変数として starttls.el で定義されている。
starttls.c (ftp://ftp.opaopa.org/elisp/starttls-0.10.tar.gz) を読んでみると TLSv1 の記述は見つかるが TLSv1.2 の記述は見つからない。
そこで starttls.el から starttls.c(のコンパイルされたもの) を呼ぶのではなく gnutls-cli を使って TLS 接続してみる。
;; wl だけで有効にしたいなら~/.wl に記述。
(setq starttls-use-gnutls t)
(setq starttls-gnutls-program "gnutls-cli")
(setq starttls-extra-arguments '("--insecure"))
(M-x customize-variable でもいいかも)
自己署名証明書を使っている場合に検証 (validate) で弾かれるような場合は "--insecure" オプションを有効にする。これ、本来は MITHM があるので良くない。サーバーによって "--insecure" つけるかどうかフラッグで切り替えた方がよさそう..
詳細は man gnutls-cli して確認。
wl + gnutls-cli で cyrus-imapd へ接続した場合の cyrus-imapd のログは、
starttls: TLSv1.2 with cipher ECDHE-RSA-AES128-SHA (128/128 bits new) no authentication
のようになった。
ひょっとすると deb パッケージなどで emacs + wl な環境とかだと、すでにこのあたり有効になってる可能性高いので、必ず
M-x describe-valiable starttls-use-gnutls
とかして t か nil かをまず確認してみること。