あなたのSSLサイトは安全ですか?
正しいサーバー証明書を利用していたとしても、Webサーバーのアップグレードが正しく行われていなかったり、利用する暗号化の設定が古かったりすると、脆弱性を突かれてしまいせっかくのSSLの目的(通信の暗号化)が果たせなくなります。
設定時に問題はなくても、後から脆弱性が見つかるということがありますので、機密性・安全性を確保するために運営しているSSLサイトの定期的な安全性のチェックは必須です。
しかし、SSLサイトが正しく機能するための要素は複数あり、一般的なサイト管理者には理解しにくい要素も少なくありません。
そこで便利なのが、SSLサイトの安全性評価を簡単に行えるこちらの Qualys SSL LABS SSL Server Test です。Qualys SSL LABS SSL Server Test は誰でも無料で利用できます。
Qualys SSL LABS SSL Server Test https://www.ssllabs.com/ssltest/
評価項目は、グラフ表示の「Certificate(証明書)」「Protocol Support(サポートされているプロトコル)」「Key Exchange(鍵交換)」「Cipher Strength(暗号強度)」で、100点満点で表示されます。
詳細評価項目について
評価に追加情報がある場合は more_info のリンクがあります。詳細評価は以下に分類されています。
詳細評価項目
評価に追加情報がある場合は more_info のリンクがあります。詳細評価は以下に分類されています。
-
Authentication(証明書評価)
証明書そのものの評価です。証明書の設定は含まれません。
著名なCAの証明書を利用していれば100%になるはずです。- Server Key and Certificate #1 証明書と秘密鍵
- Additional Certificates (if supplied) 中間証明書
- Certification Paths 証明書のパス
-
Configuration(各種設定)
Configuration(各種設定)はサーバーのバージョン、セキュリティパッチ、暗号化手法などです。
ここで問題がある場合は、セキュリティ情報などを確認して修正する必要があります。- Protocols プロトコル
- Cipher Suites 暗号アルゴリズムリスト
- Handshake Simulation 接続確認
- Protocol Details セキュリティと関係の深いプロトコル詳細
- Miscellaneous その他
判定結果は、各項目別の結果の他にA+ ~ Fまでの8段階レベルでも表示されるのですが、今回はこちらの判定結果のレベルを代表的なセキュリティ設定を行うことで上げる方法についてご紹介したいと思います。
(なお、今回紹介する内容の設定を行うことでサイトの安全性が完全に守られるわけではございませんのでご注意ください)
SSLプロトコルについて
初めにSSLとひと言で言っても様々なバージョンがありますので、そちらについて紹介します。
SSLプロトコルの種類
略称 | 正式名称 | 開発元 |
SSL | Secure Socket Layer | ネットスケープコミュニケーション |
TLS | Transport Layer Security | IETF |
SSLプロトコル 各バージョンごとの概要
バージョン | 安全性 | 概要 |
SSL1.0 | × | 最初のSSLとして設計したが、設計レビューの時点でプロトコルの脆弱性が発見されたため破棄されている。 |
SSL2.0 | × | SSL1.0の問題を修正して設計後、1994年にSSL2.0として発表。その後、いくつか脆弱性が発見されてSSL3.0が登場するが、未使用でもSSL2.0が有効な状態の場合に提示する最弱のアルゴリズムを使用させるダウングレード攻撃などを受ける可能性があるので、明示的に無効にする必要がある。 |
SSL3.0 | × | SSL2.0の問題を修正して機能追加も行い1995年にSSL3.0として発表。ただ、古くなってきている。CVE-2014-3566で脆弱性が発生したため明示的に無効にする必要がある。 |
TLS1.0 | △ | SSL3.0とTLS1.0の両者間には正確な互換性はないがほぼ同じ。CVE-2011-3389(BEAST)による一部脆弱性を含む。 |
TLS1.1 | ◯ | TLS 1.0からの変更点は、新しく発見された攻撃手法に対する耐性の強化が中心である。 |
TLS1.2 | ◎ | ハッシュのアルゴリズムにSHA-256が追加されたほか、ブロック暗号について、従来のCBCモードだけではなく、GCM、CCMといった認証付き暗号が利用可能となった。 |
上記の通り、SSLv1 / SSLv2 / SSLv3 は脆弱性があるので、 現時点で使用できるものはTLSv1以上となります。
暗号化スイートについて
サーバーでの設定で重要なのが、上記で説明したSSLプロトコルと暗号化スイートの指定になりますので、続いて暗号化スイートについての説明も行います。
暗号化スイーツの指定は、SSLCipherSuite の項目で行われ、下記のような形式で記述します。
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
暗号方式の詳細
- !は暗号スイートを使わせない
- +は暗号スイートの追加
重要なのは、脆弱性が発見された下記の暗号化スイートを利用出来なくする設定を行うことです。
内容 | 設定 | 備考 |
40bitの暗号方式を削除 | !EXP | 米国輸出規制緩和により使用可能となった暗号化方式。非常に弱い |
56bit, 60bitの暗号方式を削除 | !Low | 同じく非常に弱い |
通信を暗号化しない方式を削除 | !eNULL | |
通信の認証をしない方式を削除 | !aNULL | |
匿名暗号方式を削除 | !ADH | 匿名なので削除 |
DSS(DSA)を削除 | !DSS | RSAと違って、「通信の暗号化」はカバーしてるが、「ユーザ認証」を行っていないため、暗号強度が低い |
メッセージ認証符号にMD5を使用するものを削除 | !MD5 | MD5は選択プレフィックス衝突攻撃に対し脆弱性が存在します |
PSKを削除 | !PSK | 基本的には使用しない |
SRPを削除 | !SRP | 基本的には使用しない |
暗号方式にRC4を使用するもの削除 | !RC4 | RC4は解読が容易になるようなアルゴリズムが存在するため危殆化しています |
3DES暗号方式を追加 | +3DES | RC4を削除するとWinXP + IEで接続出来なくなるため追加 |
サーバーでの設定方法
①opensslのバージョンアップ
まず初めにopensslのバージョンを上げましょう。CentOSであればyumコマンドで簡単にバージョンを上げることが可能です。
# yum update openssl
②「SSLProtocol」と「SSLCipherSuite」の設定
続いて前述した「SSLProtocol」と「SSLCipherSuite」の設定を行います。ssl.conf内で下記の記述を行います。
1 2 |
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!EXP:!LOW:!aNULL:!eNULL:!ADH:!DSS:!MD5:!PSK:!SRP:!RC4:!3DES |
上記の設定を行ったら、WEBサーバーをリスタートします。
最後に、Qualys SSL LABS SSL Server Test で実際にレベルが変わったか確認してみましょう。
まとめ
いかがでしたでしょうか?
冒頭でも記載しましたが、正しい設定を行っていないとせっかくの証明書を生かすことが出来ません。
話は少しそれますがGoogleが2014年にウェブマスター向けの公式ブログで、「HTTPS をランキング シグナルに使用します」というタイトルの記事を投稿したのをご存じでしょうか?
https://webmaster-ja.googleblog.com/2014/08/https-as-ranking-signal.html
これは、SSL化されたWebサイトをSEOの評価として優遇します(=HTTPSであることが、SEO上のプラスになります)というものです。
あくまで要素の1つとしているようで、今のところSEO的な影響度としてはそこまで大きくないようですが、常時SSL化も推奨され始めた今日、SEO目的での利用も増えることでSSLサイトは今後も増えていくものと思われます。
正しい設定でサイトの安全性を確保していきましょう。