ApacheのSSL設定更新

ApacheのSSL(HTTPS)設定が相当にひどかったので見直してみた。

今回ひどかったのはSSLCipherSuiteの指定なので、とりあえずopensslに聞いてみる。
元の指定はとても見せられない、それはそれはひどいものなので、適当にサンプルを。

/usr/local/bin/openssl ciphers -v 'HIGH:MEDIUM:-EXPORT'
(...snip...)
RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
(...snip...)

RC4とかMD5とかひどい。(実際入ってた)
RC2/RC4/MD5あたりを削って、TLS1以降を基準にしたらまともなリストになったのでそのまま採用。

/usr/local/bin/openssl ciphers -tls1_2 -v 'HIGH:MEDIUM:-RC2:-RC4:-MD5:-SHA'

最初は-DESもついてたけど、-SHAの巻き添えで消えていた模様。

このあとPFS(Perfect Forward Secrecy)のため、HIGH:MEDIUM指定をさらに厳しくしてECDHE:DHE:ECDH:DH:-RC2:-RC4:-MD5:-SHA
この辺の”鍵交換”については自堕落な技術者の日記さんを参考にさせていただきました。
ここが重要なところ。

“E”はephemeral(一時的)の”E”です。


さて、これをそのままApacheに連れて行く。

SNIを使ってVirtualHostしてたりする場合は各VirtualHostに書くか、VirtualHostの外側で定義すればいい。

SSLStrictSNIVHostCheck on
SSLHonorCipherOrder On
SSLCompression off
SSLCipherSuite ECDHE:DHE:ECDH:DH:-RC2:-RC4:-MD5:-SHA
SSLProtocol TLSv1.2

NameVirtualHost *:443
<VirtualHost *:443>
  (...snip...)
</VirtualHost>

チェックはQualys SSL Server Testで実行。
まだいろいろあるようだけど、まぁとりあえず今はよし。

ちなみに、試したい暗号がわかっているならopenssl s_clientでも試せる。

[sugar:~] 2510% /usr/local/bin/openssl s_client -connect linkage.white-void.net:443 -servername linkage.white-void.net -tls1_2 -cipher RC4-MD5

(...snip...)

34381119560:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1472:SSL alert number 40
34381119560:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:656:

SSL alert number 40で却下されたのでOK。正常側もチェックしたいならECDHE-RSA-AES256-GCM-SHA384でも指定してみればいいんじゃないかな。