WebサーバのSSL設定が不安な時は？ Mozillaオススメの設定を使ってみよう

これは[VAddy Adventカレンダー](http://qiita.com/advent-calendar/2016/vaddy)13日目の記事です。
[VAddyは、継続的なWeb脆弱性検査が簡単に実現できるSaaSです。](https://vaddy.net/ja)

海外のカンファレンスに行くと懇親会は立食パーティの場合が多いです。そこではビールが振舞われますが、ラグニタスIPAやストーンIPAなど人気のクラフトビールが入っているのが嬉しいですね。
国内でも[iOSDC](https://iosdc.jp/2016/)や、私たちが定期的に開催してる[VAddyミートアップ](https://vaddy.doorkeeper.jp/)では、懇親会でクラフトビールを出しています。完全に私の趣味です・・・


## WebサーバのSSL設定
WebサーバのSSLの設定は主に、SSL証明書関係の設定、利用する暗号スイートやプロトコルの設定があります。
利用するプロトコル(SSLv3など）と暗号スイートですが古い設定のまま使い続けていると、脆弱なプロトコルになっているものまで使っている可能性があります。
そこで、暗号スイートとプロトコルの設定は見直しが必要なのですが、Webサーバのバージョンや、接続してくるブラウザのバージョンまで気にするとどの設定をするのが良いかわからなくなってきます。
そこで、Mozillaが便利なツール（サイト）を提供しています。

## Mozilla SSL設定ツール
それが[Mozilla SSL Configuration Generator](https://mozilla.github.io/server-side-tls/ssl-config-generator/)です。

![スクリーンショット 2016-12-13 10.13.36.png](https://qiita-image-store.s3.amazonaws.com/0/61278/1db11322-4c51-3d90-579c-285ead38028f.png)

Webサーバの種類(Apache, Nginxなど)とバージョンを指定するだけで、オススメの設定が出てきます。
そして、Modern, Intermediate, Oldというラジオボタンを選択すると、対応するブラウザのバージョンが出てきますので、ここで必要な要件の確認ができます。基本的にはModernが良いですが、Android5よりも下のバージョンを使っているユーザをサポートしないといけない場合などは、Intermediateを使うか検討が必要になります。

2016年12月の時点の対応ブラウザは表のようになってます。

| Type       | 対応ブラウザ |
|:-----------|:------------|
| Modern     | Firefox 27, Chrome 30, IE 11 on Windows 7, Edge, Opera 17, Safari 9, Android 5.0, Java 8
|Intermediate| Firefox 1, Chrome 1, IE 7, Opera 5, Safari 1, Windows XP IE8, Android 2.3, Java 7
|OLD         | Windows XP IE6, Java 6


`HSTS Enabled`はデフォルトでチェックが入っています。[HSTS(HTTP Strict Transport Security)](http://qiita.com/takoratta/items/fb6b3486257eb7b9f12e)は最初のHTTP接続以降は全てHTTPSに強制するため基本的には入れておいたほうが良いですが、HTTP接続も一部残す必要がある場合は無効にするか検討が必要です。


## ModernとIntermediateの比較
Apache2.4.18をベースに、ModernとIntermediateの違いを見てみます。
(2016年12月時点のものです。内容は将来変わると思います）

### 利用するプロトコル

| Type       | プロトコル |
|:-----------|:------------|
| Modern     | TLSv1.2 |
|Intermediate| TLSv1.2, TLSv1.1, TLSv1 |


### 暗号スイート

| Type       | 暗号スイート |
|:-----------|:------------|
| Modern     | ECDHE-ECDSA-AES256-GCM-SHA384<br/> ECDHE-RSA-AES256-GCM-SHA384 <br/>  ECDHE-ECDSA-CHACHA20-POLY1305 <br/> ECDHE-RSA-CHACHA20-POLY1305 <br/> ECDHE-ECDSA-AES128-GCM-SHA256 <br/> ECDHE-RSA-AES128-GCM-SHA256 <br/> ECDHE-ECDSA-AES256-SHA384 <br/> ECDHE-RSA-AES256-SHA384 <br/> ECDHE-ECDSA-AES128-SHA256 <br/> ECDHE-RSA-AES128-SHA256|
|Intermediate| ECDHE-ECDSA-AES256-GCM-SHA384<br/> ECDHE-RSA-AES256-GCM-SHA384 <br/>  ECDHE-ECDSA-CHACHA20-POLY1305 <br/> ECDHE-RSA-CHACHA20-POLY1305 <br/> ECDHE-ECDSA-AES128-GCM-SHA256 <br/> ECDHE-RSA-AES128-GCM-SHA256 <br/> ECDHE-ECDSA-AES256-SHA384 <br/> ECDHE-RSA-AES256-SHA384 <br/> ECDHE-ECDSA-AES128-SHA256 <br/> ECDHE-RSA-AES128-SHA256<font color="MediumVioletRed"> <br/>DHE-RSA-AES128-GCM-SHA256 <br/>DHE-RSA-AES256-GCM-SHA384 <br/>ECDHE-ECDSA-AES128-SHA <br/>ECDHE-RSA-AES128-SHA <br/>ECDHE-ECDSA-AES256-SHA <br/>ECDHE-RSA-AES256-SHA <br/>DHE-RSA-AES128-SHA256 <br/>DHE-RSA-AES128-SHA <br/>DHE-RSA-AES256-SHA256 <br/>DHE-RSA-AES256-SHA <br/>ECDHE-ECDSA-DES-CBC3-SHA <br/>ECDHE-RSA-DES-CBC3-SHA <br/>EDH-RSA-DES-CBC3-SHA <br/>AES128-GCM-SHA256 <br/>AES256-GCM-SHA384 <br/>AES128-SHA256 <br/>AES256-SHA256 <br/>AES128-SHA <br/>AES256-SHA <br/>DES-CBC3-SHA </font>|

色がついている箇所がModernに含まれない暗号スイートです。
つまり、Intermediateは、Modernの暗号スイートに加えて、色がついている暗号スイートとなります。

### より詳細な比較
詳細は、Mozillaのドキュメントを参照ください。細かい比較まで載っています。
https://wiki.mozilla.org/Security/Server_Side_TLS