NginxにSSLを導入してhttps通信する場合、設定によってはSSLの評価サイトでFなんて評価を食らってしまう場合がございます。せっかくSSL化したとしても、安全な通信が保証されなければ意味がありません。そこで、今回は、SSL評価サイトでF評価を食らってしまったこのブログサイトをA+の評価まで上げきった方法をご紹介します。
本記事を書くことにした経緯
Miningooでは、Ubuntu14.04+NginxにWordPressを乗っけてブログを運営しております。
Ubuntu14.04にてnginx環境を構築しWordpPressを高速に
先日、このブログをSSL化したのですが、後日SSL評価のサイトをためしてみると最低評価のFを食らってしまいまいした。
Ubuntu 14.04 + Nginx環境にてopenSSLを設定する手順まとめ
WordPressをSSL化してhttpからhttpsに変更する方法まとめ
せっかくSSL化したのに安全な通信が保証されていなければ意味が無いので、早速対応すること。
SSL対応したサイトを評価する方法
SSL Server Test (Powered by Qualys SSL Labs)
上記URLのサイトにドメイン名を入力するだけで、チェックすることができます。このブログで試してみると、最低評価のFを食らってしまいました。
NginxでSSLの評価をA+にするまでにやっとことリスト
NginxでSSLの評価をA+にする手順 - 9mのパソコン日記
を参考に、以下の4つの方法を実際にやってみました!
- OpenSSLをアップデートする
- SSLv3 を無効にする
- Diffie-Hellman (DH) key exchangeを生成して設定
- HSTSヘッダを追加
1. OpenSSLをアップデートする
SSL LABSの評価後のメッセージに、
「This server is vulnerable to the OpenSSL Padding Oracle vulnerability (CVE-2016-2107) and insecure. Grade set to F.」
とありました。
調べてみると、2016/5/3時点で、OpenSSLの複数の脆弱性が公開されていました。
OpenSSLに複数の脆弱性(CVE-2016-2107, CVE-2016-2108等) — | サイオスOSS | サイオステクノロジー
これに対応するために、OpenSSLをアップデートする必要があります。
を参考に、OpenSSLをアップデートしていきます。
Ubutnuのターミナルで以下のコマンドを入力
// バージョンの確認
$ dpkg -l | grep openssl
// Upgradeするバージョンの確認
$ apt-get -s upgrade | grep openssl
// 実際にOpenSSLをUpgrade
$ apt-get -y upgrade openssl
// アップグレードするバージョンもう無いことを確認
$ apt-get -s upgrade | grep openssl
// アップグレードしたバージョンを確認
$ dpkg -l | grep openssl
OpenSSLのアップデートで評価がFからBへあがりました。
このアップデートを定期的にしないと、最新の致命的な脆弱性に対応できないので今後定期的にチェックしていく。
2. SSLv3 を無効にする
SSLv3の脆弱性「POODLE」を回避するため、SSLv3を無効にする。
nginxの.conf
ファイルのssl_protocols
を以下のように設定する。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
この作業で、ひとつ警告が減りました。
httpsだからというだけで安全?調べたら怖くなってきたSSLの話!? - Qiita
3. Diffie-Hellman (DH) key exchangeを生成して設定
DH鍵交換に使用するパラメータファイルを生成して設定する。
以下のコマンドを叩くと、パラメータファイルを生成できる。
$ openssl dhparam 2048 -out dhparam.pem
生成後、Nginxの.conf
ファイルでパラメータファイルを指定する。
ssl_dhparam /あなたの環境に合わせたフォルダ/dhparam.pem;
Nginxのリロードを忘れずにする
$ sudo service nginx restart
ここまでの設定で、A評価まであがりました!
4. HSTSヘッダを追加
サーバーのヘッダにSecurity-Transport-Securityというヘッダをつけることで、以降そのブラウザからのアクセスは常にHTTPSで暗号化したもので行うように設定させられる。
Nginxの.conf
ファイルに以下を追記する
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
おなじみのNginx再起動をわすれずに。
$ sudo service nginx restart
ついにこの設定でA+の評価になりました!
本記事のまとめ
NginxにOpenSSLを導入してせっかくhttps通信にしたのに、まさかのSSLの評価がFになってしまっては意味がありません。本記事の設定をすることで、簡単にSSLの評価がA+まであがります。是非、みなさんも安全なSSLライフを!