apacheでssl関連を設定する
デフォルトのまま設定してしまうとPOODLEなどの脆弱性を含んだ状態でサイトを公開することになってしまいます。
そのため、セキュリティを高める設定を施す必要があります。
チェッカー
下記が大変便利です。
https://www.ssllabs.com/ssltest/
デフォルトの設定
デフォルトの設定やネットに載っている昔の設定を使うとsslv3などの対策がないものが多いので
脆弱性が多数あります。
チェッカーでも「F」ランクになってしまいます。
対策
何故かわからないが「SSLProtocol」や「SSLCipherSuite」を対象のバーチャルホストの設定箇所に入れても設定が効かず、httpd.confなどの全体にかかる所に入れると効いた。SSLをONにするわけではなく、定義だけなのでこの方式で進めることにする。
具体例
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4:!DH
Header set Strict-Transport-Security "max-age=315360000;"
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/*******.crt
SSLCertificateKeyFile /etc/httpd/ssl/**********.pem
SSLCertificateChainFile /etc/httpd/ssl/************.ca
SSLHonorCipherOrder
SSLHonorCipherOrderを有効にすることで、ネゴシエーションの際に暗号の選択をサーバ側で決定するようになります。
この設定を有効にすることで、SSLダウングレード攻撃を防ぎます。
SSLProtocol
SSLv2、SSLv3は深刻な脆弱性を抱えたものなので、使わないようにします。
SSLCipherSuite
脆弱性のある暗号化スイートは明示的に禁止します。
!は暗号スイートを使わせない。
-は暗号スイートを削除する。後ろで追加すれば使用することも可能
+は暗号スイートの追加。
Header set Strict-Transport-Security
HSTS はサーバーから “Strict-Transport-Security” というヘッダを返すことで、
以後そのブラウザで 同じURLを入力すると HTTP ではなく HTTPS で暗号化した通信を行うようにする機能です。
これにより、常時HTTPS通信をするように設定します。
結果
グレードはA+となりました。
ただ、見えないレガシーな携帯なども出て来るようなのでその辺りのリスクも考慮してください。