Courier IMAPのimaps/pop3sサーバについて、設定サンプルの記述ミスに起因して効果のない対策が広まってしまっているようです。
Courier IMAPでは、imapd-ssl, pop3d-sslという設定ファイル内のTLS_PROTOCOLという設定項目で使用するプロトコルのバージョンを指定でき、設定ファイルには、
##NAME: TLS_PROTOCOL:0 # # TLS_PROTOCOL sets the protocol version. The possible versions are: # # OpenSSL: # # SSL3 - SSLv3 # SSL23 - all protocols (including TLS 1.x protocols) # TLS1 - TLS1 # TLSv1.1 - TLS1.1 # TLSv1.2 - TLS1.2
と記述されています。このコメントに沿って
TLS_PROTOCOL=TLS1
という記述をもってPOODLE対策としているサイトがいくつかあるようです。
ところが、実際のプロトコルを決定するための処理は、
method=((!protocol || !*protocol) ? NULL: strcmp(protocol, "SSL3") == 0 ? SSLv3_method(): strcmp(protocol, "SSL23") == 0 ? SSLv23_method(): strcmp(protocol, "TLSv1") == 0 ? TLSv1_method(): #ifdef HAVE_TLSV1_1_METHOD strcmp(protocol, "TLSv1.1") == 0 ? TLSv1_1_method(): #endif #ifdef HAVE_TLSV1_2_METHOD strcmp(protocol, "TLSv1.2") == 0 ? TLSv1_2_method(): #endif NULL); if (!method) { method=SSLv23_method(); options|=SSL_OP_NO_SSLv2; }
というコードになっており、TLS_PROTOCOLの値が"SSL3", "SSL23", {~orangered:"TLSv1"~}, "TLSv1.1", "TLSv1.2"であればそれらに対応するプロトコル、それ以外、つまりサンプルに記述されている"TLS1"などの場合は"SSL23"相当、つまりSSLv3が有効な状態になってしまいます。
したがって、正しくは当該部分を
TLS_PROTOCOL=TLSv1 TLS_STARTTLS_PROTOCOL=TLSv1
と記述する必要があるようでした。
ちなみに、opensslコマンドで以下のように実行して、handshake failureが返ってくればSSLv3は無効になっている事が確認できます。
% openssl s_client -ssl3 -connect localhost:993 CONNECTED(00000003) 62978:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/s3_pkt.c:1106:SSL alert number 40 62978:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/s3_pkt.c:543:
こうならずに
* OK [CAPABILITY (略)] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
のような表示になったらSSLv3がまだ有効になったままですので、設定を見直す必要があります。