SSLサーバテストをやってみたら、判定が「F」だったので反省してみました

この記事は約5分で読めます。

こんにちは

タイトルをCと書きましたがFの間違いだったので訂正しました。m(_ _)m

先日、TwitterでSSLサーバのテストを実行したと言うのを見かけました。

※最初に書いときます。プロトコル等はあまり詳しくないので、詳細な所で、間違えてるかも。。です。あまり信用せずに必要でしたら自分で調べてみてください。

私の管理しているサイト自体、秘密情報(個人情報)はあまり扱っていないので、正直言うと強くは気にしていませんでした。(^^;

サーバを乗っ取られる様なのは気にしてますけど。。

だいぶ前にSSL通信でPOODLEと言う脆弱性が話題になりました、これって暗号化通信している通信経路に介在して暗号化している通信を途中で傍受出来てしまう問題で、通信経路の介在出来る可能性のある通信の場合、(FreeWiFiの一部とか?)とかを使ってると割と痛手かなと思います。

これはまずいなと、これは流石に対応しました。メールサーバが面倒でした。(当時qmailを使ってたので。。対応しきれず、このブログでパッチを公開したような。。)

で、話は戻りますが、SSL通信(SSL/TLS通信)って、身近な所だと、このサイトも使ってますが、https://で始まるURLのサイトを表示する際には、SSL/TLS通信を使用しています。

これって簡単に言うと、相手先の証明(確認)、通信の暗号化、通信内容の改ざん検知が出来る通信となります。

通販サイトなどでは、URLがhttps://で始まらず、http://で始まるサイトは危ないと言われるのは、http://で始まるURLは通信が暗号化されていないので、通信途中で除く(覗ければ。。)と、全部簡単に見れちゃいます。クレジットカード番号とか目も当てられませんよね。

また、https通信で利用されている、SSL/TLS通信ですが、SSLは既に廃止、TLSも1.0,1.1,1.2とあり、1.1以前が昨年の7/1からクレジットカード業界では利用不可になっているみたいです。(さっき知りました)

なので、TLS1.2に対応していない、ガラケー等はクレジットカード決済ができなくなっている。。はずです。かな?(^^;

Android4.0.4以前、iPhoneもiOS4以前は同様の様です。

と、言う前提で以下を書きます。

Twitterで見かけたSSL Server Testと言うページでチェックしてみます。利用は無料だそうです。

→ SSL Server Test

結構時間がかかるのでドキドキしながら待ちます。結果「F」だそうで。

通信上大きな問題があるとは思えませんが、どうも、脆弱なプロトコルSSL1,2,3,TLS1.0, 1.1を受け入れるだけでガッツリ評価を下げる様です。確かに通信自体は脆弱だと思いますが、接続側に合わせてるので、使う側の問題では?と思いますが。。拒否しろって事なんでしょうね。

地味にショックなので、レーティングを上げたい。。と思います。

使ってるWebサーバ(apache2)のSSLの設定を見ます。

こんな感じになってます。POODLE対応した時の設定(だと思う)SSLv2,v3を除外してます。

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

SSL Server Checkの結果を見てみるとTLS1.0, TLS1.1を受け入れているのが評価を下げているので受け入れるプロトコルをTLS1.2に固定します。こんな感じで修正してWebサーバを再起動。

SSLProtocol TLSv1.2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5!RC4!3DES!IDEA

再度、SSL Server Testを実行。

レートが「C」にアップ。どうせなら「A」が良いな。

通信プロトコルを確認します。TLS1.2以外はNoになってます。満足。

これで、ガラケーや、古いスマホからアクセスできなくなりました(^^;

さてどうしたのもか。。Google先生に聞いてみます。(^^;

HSTS(Strict-Transport-Security)を使えとの事。何か調べてみると、一回https通信で接続したドメインには強制的にhttp通信であってもhttpsで通信する設定の様です。なんか凄い設定ですね。。でもhttpを使うつもりは無いので、まあ良いかな。。コピペしたのですが、期間は10年ですね。(設定は秒)ながい?別に良いかぁ。。

以下の行を追加して再起動します。

Header set Strict-Transport-Security "max-age=315360000;"

サイトSSL Server Testを実行、レート「C」で変化なし。。やっぱり!?(笑)

更に調べます。

SSLHonorCipherOrder行を追加します。これを追加すると、ネゴシエーション時(通信開始時に通信方法を取り決める)に、暗号の選択をサーバ側で指定するそうです。これがないと、接続元(クライアント)側が決めるみたいですね。サーバ側で一番強度の高い暗号化方式を選択するのかな?

あと、通信時の鍵交換方式から「ディフィー・ヘルマン鍵交換(DH鍵交換)」を除外する為に、SSLCipherSuiteの最後に、!DHを追加しました。

DH鍵交換には、「Logjam」と言う脆弱性があるそうです。なるほど。

これだけやってWebサーバを再起動します。

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5!RC4!3DES!IDEA!DH
SSLHonorCipherOrder On

その後、SSL Server Testを再実行。

ついにレートが「A」を超えて「A+」になりました。\(^o^)/

満足です。ちなみに全部100%にするには、サーバ証明書(証明局)を変更する必要があるみたい?

なので、費用もかかるので、ここで満足する事にします。

なんか、勝ち取った感があります(笑)

コメント

  1. 今はtls1.3までありまーす!

    • ma3kiさん
      コメントありがとうございます。
      tls1.3とか表示側が対応してなくない?ってスルーしましたが、ChromeもFirefoxも昨年対応してるんですね。
      暇を見て対応してみたいかなと思います。お教えありがとうございますm(_ _)m