NmapでSSLの設定と対応ブラウザの確認方法

こんにちは、罰金担当の高橋です。 最近、弊社のリリースしたサービスで本番環境で特定のブラウザでは表示されないという事象が発生しました。原因を調査すると、サーバー側のSSLの設定によりアクセスができないというのが原因でした。再度同じ事象をおこさないように、SSLの設定の確認方法と、SSLの設定に対応するブラウザの調査方法をまとめました。

現在のSSLの設定を確認する

初めに、現在のサーバーのSSLの設定を確認します。確認にはNmapを使用します。Nmapとはセキュリティスキャナで、ポートスキャン機能だけでなく、OSやバージョンの検出機能、サービスおよびそのバージョンの検出機能を備えています。また、Nmap Script Engineというネットワーク処理を自動化するスクリプト機能を備えています。今回はデフォルトで用意されているssl-enum-ciphersを使用します。

環境設定

今回はWindowsでNmapを動作させます。Nmapを動作させるためにWinPcapを利用します。WinPcapとはネットワーク上を流れているパケットをキャプチャするツールです。

  1. http://www.winpcap.org/install/default.htmにアクセスし、WinPcapをダウンロードします。

  2. Installer for Windowsをクリックしてダウンロードし、インストールをします。

次にNmapをインストールします。

  1. https://nmap.org/download.html にアクセスし、Nmapをダウンロードします。Microsoft Windows binaries の欄から Latest command-line zipfile: にあるリンクをクリックします。ダウンロードが終わったら、ZIPファイルを解凍します。

  2. 解凍後のフォルダを適当なフォルダに移動させます。システム変数のparhに移動後のパスを追加します。

  3. コマンドプロンプトを起動し、nmapと入力し、USAGEが表示されたら成功です。

NmapでSSLの確認

コマンドプロンプトから下記のコマンドを入力します。

nmap -v --script ssl-enum-ciphers -p 443 example.com

オプションに -oN <ファイル名> をつけると、ファイルに結果を出力することができます。 example.comの部分には調査したいサイトのFQDNもしくはIPアドレスを入力してください。結果は以下のように表示されます。

Starting Nmap 6.47 ( http://nmap.org ) at 2015-06-14 13:22 a/T
NSE: Loaded 1 scripts for scanning.
NSE: Script Pre-scanning.
Initiating Ping Scan at 13:22
Scanning example.com (93.184.216.34) [4 ports]
Completed Ping Scan at 13:22, 0.80s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 13:22
Completed Parallel DNS resolution of 1 host. at 13:22, 0.09s elapsed
Initiating SYN Stealth Scan at 13:22
Scanning example.com (93.184.216.34) [1 port]
Discovered open port 443/tcp on 93.184.216.34
Completed SYN Stealth Scan at 13:22, 0.27s elapsed (1 total ports)
NSE: Script scanning 93.184.216.34.
Initiating NSE at 13:22
Completed NSE at 13:23, 11.88s elapsed
Nmap scan report for example.com (93.184.216.34)
Host is up (0.18s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers:
|   SSLv3: No supported ciphers found
|   TLSv1.0:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_SEED_CBC_SHA - strong
|     compressors:
|       NULL
|   TLSv1.1:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_SEED_CBC_SHA - strong
|     compressors:
|       NULL
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_SEED_CBC_SHA - strong
|     compressors:
|       NULL
|_  least strength: strong

NSE: Script Post-scanning.
Read data files from: C:\tool\nmap
Nmap done: 1 IP address (1 host up) scanned in 19.08 seconds
           Raw packets sent: 5 (196B) | Rcvd: 2 (84B)

簡単に結果の見方を説明します。

|   SSLv3: No supported ciphers found

これが表示された場合はSSL3対応のブラウザでは接続することができません。

|   TLSv1.0:
|     ciphers:
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_MD5 - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong

これが表示された場合にはTLS1.0での接続は可能です。また、その下に表示されているciphersは利用可能な暗号化アルゴリズムを表示しています。

対応ブラウザの確認方法

以下のサイトに取りまとめられているので、Nmapの結果と見比べて確認します。 Template:ウェブブラウザにおけるTLS/SSLの対応状況の変化 - Wikipedia

Nmapの使い方がよくわからない場合

Nmapの使い方がわからない、または調査する時間が無いという場合は下記のサイトで簡単にチェックができます。対応ブラウザや、SSLの設定強度までグラフ化してわかりやすく説明しいます。 sslcheck.globalsign.com

設定変更の際には以下のサイトが役に立ちます。

SSLの設定ガイドライン

情報処理推進機構(IPA)がSSL/TLS暗号化設定ガイドラインという資料を出しています。 www.ipa.go.jp SSL/TLSの説明や保持している情報ごとに3段階に分けてSSLの設定のガイドラインを提示しています。また、設定のチェックシートも用意されています。

SSLの設定の作成

下記のサイトでは、Webサーバーの種類やバージョンと、設定(Old、Intermediate 、Modern)を選ぶだけでSSLの設定を作成をしてくれます。

Generate Mozilla Security Recommended Web Server Configuration Files

Nmapを使用すると、簡単にSSLのチェックができます。Nmapでは他にも、ポートスキャンなどもでき、脆弱性のチェックもできます。次はポートスキャンの方法について紹介しようと思います。