httpsのセキュリティを測定・設定する¶
httpsを使用することでWebサーバと暗号化通信を行うが、デフォルトの設定では
複合化される恐れのある暗号方式を利用することもあるため、細かく設定を行う
必要がある。
セキュリティレベルを測定する¶
次のシステムでサイトのセキュリティを「A~F」段階で測定することができる。
- SSL Server Test (Powered by Qualys SSL Labs)
https://www.ssllabs.com/ssltest/
httpdのSSL設定の観点¶
「/etc/httpd/conf.d/ssl.conf」の次の設定でセキュリティの設定を行う。
サイトの公開形式によっては、VirtualHostディレクティブ内にある場合に効果が出ない場合もあるので、
上記の測定を行いながらVirtualHostディレクティブ外に設定すると設定が適用される場合がある。
- SSLProtocol
「SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2」から使用するSSLおよびTLS暗号化方式を設定する。
「SSLv2」「SSLv3」には脆弱性があるため「TLSv1」以降を利用することが望ましい。 - SSLHonorCipherOrder
暗号化スイートの指定をサーバ/クライアントどちらで行うかをしているする。
デフォルトの「Off」はクライアント側が暗号化スイートを選択するため、解読されやすい
方式を使用する可能性がある。
「On」にしてサーバ側で暗号化スイートを選択することで解読されにくい方式を強制すること
が望ましいが、古いブラウザでは暗号がスイートに対応していない可能性が稀にあるため注意。 - SSLCipherSuite
サーバ側で利用する暗号化スイートを定義する。かなり細かい設定ができるため、ここが
セキュリティ設定の要となる。
本設定では記載する順番および接頭に以下の識別子を付けることで以下の設定を意味する。順番:先頭から判定を行う 識別子なし:指定した暗号化スイートを追加する -:指定した暗号化スイートを削除するが、後方で追加した場合は追加される (特定の暗号方式を含むものを一度すべて削除し、特定パターンのみ後から許可するなど) !:指定した暗号化スイートを削除する。後方で追加することはできない +:指定した暗号化スイートをこの判定位置に追加する
デフォルト値は「ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW」で、以下の内容となる。ALL すべての暗号化方式を追加 !ADH 匿名形式を削除 !EXPORT 40ビット暗号方式を削除 !SSLv2 SSLv2暗号方式を削除 RC4+RSA RC4+RSAを使用する暗号方式を追加 +HIGH 128ビットのAESおよび3DES等の暗号方式を追加 +MEDIUM 128ビットのRC4およびSEED等の暗号方式を追加 +LOW 56ビットまたは64ビット低強度暗号方式を追加
- SSLCipherSuiteに設定する値について
設定する値については、「openssl ciphers -v 'ALL'」で確認することができる。「'ALL'」
部分を上記識別子を組み合わせた設定値を指定することで、利用できる暗号化スイートを
確認することができる。
設定の基準としては、総務省及び経済産業省が公開している「CRYPTREC暗号リスト」に則った
設定を行ったうえで、「SSL Server Test」でさらに「WEAK」と判断されたものを個別に削除する。
電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト)
「WEAK」と表示された方式はそのままの内容で指定はできないので、前述のopenssl
コマンドで内容を突き合わせて設定すべき値をマッチングする必要がある。■SSL Server TestのWEAK結果 TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) WEAK 256 TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d) WEAK 256 ■opensslコマンドに現在のSSLCipherSuiteの値を指定して実行 # openssl ciphers -v 'ALL:!ADH:!EXPORT:!SSLv2:!SSLv3:!RC4:!3DES:+HIGH:!MEDIUM:!LOW' ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256 DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(256) Mac=SHA256 ECDH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(256) Mac=AEAD ECDH-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD ECDH-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(256) Mac=SHA384 ECDH-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA384 AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256 ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256 ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256 DHE-DSS-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(128) Mac=AEAD DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256 DHE-DSS-AES128-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(128) Mac=SHA256 ECDH-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(128) Mac=AEAD ECDH-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(128) Mac=AEAD ECDH-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(128) Mac=SHA256 ECDH-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA256 AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256 ■上記のうち下記がマッチしたと推測される。 TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) WEAK 256 ↓ AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d) WEAK 256 ↓ AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256 ■次の削除設定値が導き出される。 !AES256-GCM-SHA384 !AES256-SHA256 ■もとの設定値に追加する ALL:!ADH:!EXPORT:!SSLv2:!SSLv3:!RC4:!3DES:+HIGH:!MEDIUM:!LOW:!AES256-GCM-SHA384:!AES256-SHA256
かいつまんで言うと、128ビット未満の暗号化方式、RC4、3DES、SSLv3までの方式を削除する。 - SSLCipherSuite設定例
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!SSLv3:!RC4:!3DES:+HIGH:!MEDIUM:!LOW:!AES256-GCM-SHA384:!AES256-SHA256
DNSの設定¶
DNSに「CAA」レコードが存在しない場合、証明書のCAA部分で警告が発生する。
DDNSなどでは設定できない場合もあるが設定できる場合は下記を設定する。
複数のCAAレコードを登録できない場合もあるので、その場合は1行目だけでも何とかなるみたい。
証明書発行機関名は発行機関のサイトを参照だが、例えばletsencryptだと「letsencrypt.org」となる。
* IN CAA 0 issue "証明書発行機関名" * IN CAA 0 issuewild ";" * IN CAA 0 iodef "mailto:サイト責任者のメールアドレス"
これらを繰り返し行うことで、セキュリティ判定が「A~A+」くらいにはなると思われる。