自分のサイトのSSLの安全性をチェックしよう(SSL Server Test)

サーバー

無料SSLのLet’s Encryptの普及により、もはやサイトの常時SSLは常識となりつつあるが、常時SSL化したからといって安心してはいられない。

SSLのバージョンや「暗号スイート(Cipher Suites)」という暗号アルゴリズムの組み合わせのしかたにより、せっかく常時SSLを導入しても脆弱性が残ってしまう。

というわけで常時SSLのセキュリティを更に高める方法を解説していく。

※動作確認環境
CentOS Linux 7.6
Nginx version 1.14.2
BIND version 9.9.4
Let’s Encryptで常時SSL化済み

サイトのSSL安全性をチェック

「SSL Server Test」を実行

まず、Qualys SSL LABSの「SSL Server Test」で自分のサイトのSSLをチェックする。
※「SSL Server Test」は世界的に有名なSSL暗号化の安全性をチェックするための無料ツールで、誰でもWEBから簡単に利用できます。

SSL Test – SSL Server Test (Powered by Qualys SSL Labs)
https://www.ssllabs.com/ssltest/

Qualys SSL LABSの「SSL Server Test」
「SSL Server Test」実行

「Hostname」に自分のドメインを入力し、「Do not show the results on the boards」にチェックを入れて「Submit」をクリックするだけです。
※「Do not show the results on the boards」にチェックを入れないとテスト結果が公開されてしまい、もし脆弱性があるSSL設定だった場合は公開されたらマズイので必ずチェックを入れましょう。

1分ほど待つとSSLのテスト結果が表示されます。

「SSL Server Test」実行結果画面

既に「A+」の評価をもらっているので完璧のような気がするが、チェック結果の詳細を見て更に完璧を目指していきます。

チェック結果の解析

このチェックを行った際のnginx.confの設定は以下のとおりです。

この設定でのチェック結果をスクロールして順に見ていきます。

Certificate #1: RSA 2048 bits (SHA256withRSA)

「SSL Server Test」実行結果(1)

Server Key and Certificate #1の「DNS CAA」が赤文字で「No」になっています。

「SSL Server Test」実行結果(2)

ここは問題無し。

Configuration

「SSL Server Test」実行結果(3)

Protocols(プロトコル)の部分の「TLS 1.0」と「TLS 1.1」が赤文字で「Yes」になっています。

「SSL Server Test」実行結果(4)

Handshake Simulationの部分に「TLS 1.0」と「TLS 1.1」が赤文字でたくさん表示されています。

「SSL Server Test」実行結果(4)

Protocol Detailsの「Session resumption (caching)」が赤文字で「No (IDs assigned but not accepted)」と表示されています。

「SSL Server Test」実行結果(5)

ここは問題無し。

対策が必要な項目

  • Server Key and Certificate #1の「DNS CAA」
  • Protocols(プロトコル)の「TLS 1.0」と「TLS 1.1」
  • Handshake Simulationの「TLS 1.0」と「TLS 1.1」
  • Protocol Detailsの「Session resumption (caching)」

対策が必要なのはこの4つですね。

対策開始

DNS CAAレコードをBINDに設定

DNS CAAレコードとは、ドメインのSSL証明書に署名を許可する認証局(CA:Certification Authority)を指定するDNSエントリです。CAAレコードで認証局を指定することによりSSL証明書の改ざんを防ぐことができます。

まず、CAAレコードを作成します。

今回は「CAA Record Helper」を利用してCAAレコードを作成していきます。

■CAA Record Helper
https://sslmate.com/caa/

CAA Record Helper

「1. Enter Your Domain Name」にドメイン名を入力し、「2. Select Authorized Certificate Authorities」では許可する認証局を選択します。
※ワイルドカード証明書を利用している場合は「Wildcard」にもチェック。
※「3. Incident Reporting (Optional)」は任意です。

CAA Record Helperでの設定(1)

すると「4. Publish Your CAA Policy」にDNSサーバの種類別でCAAレコードが生成されて表示されます。

CAA Record Helperで生成されたCAAレコード

当方の環境は「BIND version 9.9.4」なので、「Legacy Zone File (RFC 3597 Syntax)」の

を、vi等で「/var/named/onoredekaiketsu.com.hosts」の末尾あたりに追加してBINDを再起動します。※vi等で直接編集した場合はシリアルナンバーの増加も忘れずに。

以上でBINDのCAAレコード設定は完了です。

プロトコルの「TLS 1.0」と「TLS 1.1」を無効化

Nginxのserverディレクティブで「TLS 1.0」と「TLS 1.1」を無効化します。

「ssl_protocols」の部分の「TLSv1」と「TLSv1.1」を消すだけです。

Session resumption (caching)設定

Nginxのhttpディレクティブで「ssl_session_cache」と「ssl_session_timeout」の設定を追加します。

Nginxを再起動します。

これで全ての設定が完了です。

再チェック

もう一度「SSL Server Test」を行ってみます。

SSL Test – SSL Server Test (Powered by Qualys SSL Labs)
https://www.ssllabs.com/ssltest/

「SSL Server Test」の再テスト(1)

Protocol Supportの値が100になりました。

「SSL Server Test」の再テスト(2)

DNS CAAが緑色の「Yes」になりました。

「SSL Server Test」の再テスト(3)

TLS 1.0とTLS 1.1が「No」になり赤文字の警告が消えました。

「SSL Server Test」の再テスト(4)

Android 4.4.2未満や古いブラウザをTLS 1.2で切り捨てたことにより赤文字の警告が全て消えました。

「SSL Server Test」の再テスト(5)

Session resumption (caching)が「Yes」になり赤文字の警告が消えました。

「SSL Server Test」の再テスト(6)

すべての警告が消えてスッキリしました。

SSLのバージョンや暗号スイート(Cipher Suites)、その他のセキュリティの仕組みはどんどんアップデートさせるので、SSLの安全性チェックは定期的に行っておきましょう。

以上で解決です。

タイトルとURLをコピーしました