IPA「SSL/TLS 暗号設定 ガイドライン」を基にしたウェブサーバーの設定例

SSL/TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~:IPA 独立行政法人 情報処理推進機構 を参考にして、実際にウェブサーバーのSSL設定をどう書けばよいのか?をメモする。

(注意)元資料ではかなり細かく説明されています。ここではかなり簡略化しているので参考程度に読んで下さい。

設定するために決めておく主な項目

この資料を元にウェブサーバーを設定する場合、次の選択肢をそれぞれ決定してそれを基に設定していく(ものすごく簡略化している)。

  1. 次のどれを採用するか?
    • 高セキュリティ型
    • 推奨セキュリティ型
      • 普通はこれでよさそう。
    • セキュリティ例外型
  2. 暗号スイートに、ECDH / ECDHE(楕円曲線暗号を使った暗号アルゴリズム。鍵交換で使う)を使うかどうか?(使わない場合は「基本」の方を使う)
    • ECDH / ECDHE はパテントリスクがあるらしい。
    • 暗号スイートは、まずは「推奨セキュリティ型の設定例(楕円曲線暗号あり)」を参考にして設定しておき、SSL Server Test (Powered by Qualys SSL Labs) でテストしてみて、もし問題がありそうであれば、「推奨セキュリティ型の設定例(基本)」に切り替えればよさそう。
  3. HSTS(HTTP Strict Transport Security) を設定するかどうか?
    • 一度有効にしてから無効にしたくなった場合、クライアント側の設定をコントロールするのが難しい。
    • ブラウザ自体の HSTS関連設定も何かイマイチだった(一度、HSTSがセットされたウェブサイトに対して、後からそれを取り消す機能がちゃんと動かないことがあった)。
    • これを設定していると、そのウェブサイトに対して OWASP ZAP のようなツールで SSL通信をプロキシできない。
  4. OCSP Stapling を設定するかどうか?
    • それ程面倒でもなさそうなので設定しておけばよさそう。
  5. Public Key Pinning を設定するかどうか?
    • 証明書更新時などにトラブルの元になる覚悟が必要
    • ちゃんとコントロールできる体制があるのであれば設定すればよい。

推奨セキュリティ型を採用した場合の設定例(Apache)

ssl.conf

(中略)
# OCSP Stapling の設定をする場合は、ここに追記する。
## キャッシュサイズ 128,000 バイト
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

<VirtualHost *:443>
    (中略)
    SSLEngine on

    # 証明書と鍵の設定
    SSLCertificateFile /etc/ssl/chain.crt
    SSLCertificateKeyFile /etc/ssl/server.key
    SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem
    SSLCACertificateFile /etc/ssl/certs/ca.pem

    # 暗号スイート設定
    ## 推奨セキュリティ型の設定例(楕円曲線暗号あり)
    SSLCipherSuite "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES1 28-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES 128-SHA:AES128-GCM-SHA256:AES128-SHA256:CAMELLIA128-SHA:AES128-SHA:ECDH-E CDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-G CM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RS A-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:AES256-GCM-S HA384:AES256-SHA256:CAMELLIA256-SHA:AES256-SHA:ECDH-ECDSA-AES256-GCM-SH A384:ECDH-RSA-AES256-GCM-SHA384"

    # プロトコルバージョン設定
    SSLProtocol all -SSLv2 -SSLv3

    # 暗号スイート順序サーバ優先設定
    SSLHonorCipherOrder on

    # OCSP Stapling の設定をする場合には、こちらにも記述が必要
    SSLUseStapling on

    (中略)

(中略)

推奨セキュリティ型を採用した場合の設定例(nginx)

server {
    listen 443 ssl;
    (中略)
   
    #証明書と鍵の設定
    ssl_certificate /etc/ssl/chain.crt;
    ssl_certificate_key /etc/ssl/server.key;

    # 暗号スイート設定
    ## 推奨セキュリティ型の設定例(楕円曲線暗号あり)
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES1 28-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES 128-SHA:AES128-GCM-SHA256:AES128-SHA256:CAMELLIA128-SHA:AES128-SHA:ECDH-E CDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-G CM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RS A-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:AES256-GCM-S HA384:AES256-SHA256:CAMELLIA256-SHA:AES256-SHA:ECDH-ECDSA-AES256-GCM-SH A384:ECDH-RSA-AES256-GCM-SHA384";

    #プロトコルバージョン設定。Appendix B.2.3 も参照のこと
    ## nginx ver. 1.1.13/1.0.12 かつ OpenSSL ver. 1.0.1 以上 の場合はこちら
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ## そうでない場合はこちら
    #ssl_protocols TLSv1;

    # 暗号スイート順序サーバ優先設定
    ssl_prefer_server_ciphers on;

    # OCSP Stapling を使う場合の設定
    ## SSLが設定された複数のVirtual Hostがある場合は、全てOCSPを有効にしておく必要がある。
    ssl_stapling on;
    ssl_stapling_verify on;
    # ssl_trusted_certificate:
    #    - ルートCA、中間証明書(必要なら) が pem形式で含まれている必要がある
    #    - なので、ssl_certificate で指定したファイルと同じでもよいこともありえる
    ssl_trusted_certificate /etc/ssl/ca-certs.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 10s;

    (中略)
}

設定の確認

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*