Webサーバー nginx における SSL証明書設定の安全性向上 ~SSL Server Test で A+ 判定を目指して~

はじめに

 以前の投稿から4年が過ぎ、当時は良好だった項目がいくつか Weak 判定されるようになったため、2019.10.10現在で良好な状態になるよう調整しました。

時間がない人のために

 調整が完了した nginx の設定内容です。この設定は対応するクライアント(ブラウザ)の互換性よりも、安全性を優先しています。そのため、Android 6.0 以前の標準ブラウザーや、iOS8 以前の Safari、IE10 以前のブラウザー、Java7 以前の Java プログラムなどからはアクセスできなくなる可能性があります。

    (前略)

    ssl_prefer_server_ciphers  on;
    ssl_ciphers  'ECDHE+AESGCM DHE+AESGCM !AES128 !aNULL !eNULL !SSLv2 !SSLv3';
    add_header  Strict-Transport-Security "max-age=31536000; includeSubdomains";

    (後略)

設定の調整方法

 現時点 (2019.10.10) での判定が良好となるような nginx での設定を調査してみました。

調整前の安全性確認

 前回の投稿のままでも判定は A+ でした。しかし、AES-CBC を含むサイファーが Weak 判定となっていました。

  • Certificate: 100
  • Protocol Support: 100
  • Key Exchange: 90
  • Cipher Strength: 90

    (前略)

    ssl_prefer_server_ciphers  on;
    ssl_ciphers  'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
    add_header  Strict-Transport-Security "max-age=31536000; includeSubdomains";

    (後略)

Weak 判定されたサイファーの除去

 AES-CBC を含まないよう、ホワイトリストに AESGCM を指定しました。AES-CBC はなくなり、AES-GCM のみとなりました。

  • Certificate: 100
  • Protocol Support: 100
  • Key Exchange: 90
  • Cipher Strength: 90

    (前略)

    ssl_prefer_server_ciphers  on;
    ssl_ciphers  'ECDH+AESGCM !aNULL !eNULL !SSLv2 !SSLv3';
    add_header  Strict-Transport-Security "max-age=31536000; includeSubdomains";

    (後略)

DHE の追加

 DHE を指定しても問題ありませんでしたので、追加することにしました。また、ECDH+AESGCM を指定しても ECDH は選択されず、実質 ECDHE のみとなりますので、これを指定するようにしました。

  • Certificate: 100
  • Protocol Support: 100
  • Key Exchange: 90
  • Cipher Strength: 90

    (前略)

    ssl_prefer_server_ciphers  on;
    ssl_ciphers  'ECDHE+AESGCM DHE+AESGCM !aNULL !eNULL !SSLv2 !SSLv3';
    add_header  Strict-Transport-Security "max-age=31536000; includeSubdomains";

    (後略)

AES128 の除去

 AES128 を除去すると、「Cipher Strength」が100に上昇します。
 ただし、これを除去したとき、Android 5.0 及び 6.0 が非対応となりました。なぜか 4.4.2 は対応しています…。

  • Certificate: 100
  • Protocol Support: 100
  • Key Exchange: 90
  • Cipher Strength: 100

    (前略)

    ssl_prefer_server_ciphers  on;
    ssl_ciphers  'ECDHE+AESGCM DHE+AESGCM !AES128 !aNULL !eNULL !SSLv2 !SSLv3';
    add_header  Strict-Transport-Security "max-age=31536000; includeSubdomains";

    (後略)

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください