技術メモ

サーバ証明書を入れた時に一緒にやっておきたい暗号スイート設定

1.SSL Server Test

昨今のネット事情は、HTTPS必須の様相を呈してきました。

当サイトも無料ではありますがサーバ証明書を導入しています。しかし、ひょんな事からQUALYS SSL LABSSSL Server Testというサイトを知りました。

QUALYS_SSL_LABS_SSL_Server_Test

このサイトは、簡単に言えば自分のサイトがどれだけのセキュリティレベルなのかがわかります。

試しに、VPSにサーバ証明書を入れただけの環境を入れてみると・・・

Σ(゚д゚lll)し、C!!?

こらマズいと思い、きちんと対策をとりました。

ちなみに・・・オレっちの環境:

  バージョン
OS CentOS Linux release 7.2.1511
apache 2.4.6

2.A+にするためのセキュリティ設定

まず、OpenSSLを最新化します。

yum update openssl openssl-devel

※2017年6月現在、OpenSSLのyumのリポジトリは1.0.1系しかありませんので、1.0.2系か1.1系を別途インストールすることをお勧めします。

次に、何がマズいのか調べるとSSL3.0が有効になっていましたので、SSL3.0を無効化します。(ssl.conf)

SSLProtocol all -SSLv2

↓

SSLProtocol all -SSLv2 -SSLv3

次に3DES、RC4、DHを無効化します。

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

↓

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH

次に、 暗号スイート順序はサーバ側の順序を優先する設定を有効化します。

SSLHonorCipherOrder on

最後に、HSTSの設定を追加します。

Header set Strict-Transport-Security "max-age=315360000;"

これで見事評価A+になりました!!

3.IPAのSSL/TLS暗号設定ガイドラインに準拠したセキュリティ設定(2017年6月現在)

IPAのサイトに暗号スイートに関するSSL/TLS暗号設定ガイドラインがあり、

  • 高セキュリティ型
  • 推奨セキュリティ型
  • セキュリティ例外型

に分けられており、単に高セキュリティに設定すればいいというわけでもないようです。

そこで、IPAのSSL/TLS暗号設定チェックリストなるものに従って暗号スイート設定をしてみます。

↓ Excel版チェックリストの「はじめに」シート

このチェックリストに従って、高セキュリティ型にするか推奨セキュリティ型にするか(セキュリティ例外型はハナから外しました)、またその中でもAなのかBなのかその他どの優先順位パターンが自分のサイトに適切なのかを選びました。

2.項では使用するアルゴリズムを無効化するやり方でしたが、この場合は暗号化スイート設定を明示的に記載します。(ssl.conf)

SSLCipherSuite TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256:TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:TLS_DHE_RSA_WITH_AES_128_CBC_SHA:TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256:TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

その結果、

評価はA+のまま変わりありませんでしたが、古いブラウザは軒並みサポート外に。。

4.まとめ

結局、評価もA+だし一部の激古ブラウザ以外はサポートしていた2.項の設定に落ち着きました。

ちなみにSSLCipherSuiteの設定は<VirtualHost>内に記載すると全く効きませんので、ファイルの一番下にすべて記載しちゃいましょう。

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH

SSLHonorCipherOrder on

Header set Strict-Transport-Security "max-age=315360000;"

いろいろ調べてみた結果、暗号化スイートで言えばとりあえずセキュリティを高くすればいいというわけではありませんでした。

SSL Server Testで高評価をとれば

OK!!オレ無敵!!( ̄^ ̄)

というわけでもなさそうです。

そのサイトがどういう特性なのか、どの程度のセキュリティレベルとどの程度のブラウザまでサポートするのかそのバランスをしっかり検討した上で設定する必要があります。

と、自分に言ってみる。