ウェブサイト脆弱性:TLS1.1を無効化する方法と必要な理由
2023年5月31日
この記事では、TLS 1.1の無効化と最新のTLSバージョンへの移行方法について解説します。TLS 1.1の脆弱性と互換性の問題を明らかにし、セキュリティを強化するためにTLS 1.2やTLS 1.3を設定する手順を紹介します。さらに、Nginxでの具体的な設定方法や、Mozilla SSL Configuration Generatorを使用してモダンなTLS設定を簡単に導入するガイドラインも提供しています。セキュリティリスクを最小限に抑え、最新の暗号化プロトコルでウェブサイトを保護しましょう。
日本の上場企業3715社の公式サイトのTSL1.1対応率 出典: 日本の上場企業3715社の公式サイトのSSL/TLSセキュリティ脆弱性ダッシュボード
TLS1.1が有効になっている事の何が問題なのか
TLS 1.1は、古いバージョンのTransport Layer Security(TLS)プロトコルです。TLSは、セキュアな通信を確立するための暗号化と認証のプロトコルです。
TLS 1.1にはいくつかのセキュリティ上の問題があります。
- セキュリティの脆弱性: TLS 1.1には、現代のセキュリティ基準に対応しきれない脆弱性が存在します。例えば、TLS 1.1では、CBC(Cipher Block Chaining)モードでの暗号化における攻撃手法であるBEAST(Browser Exploit Against SSL/TLS)攻撃が可能です。このような脆弱性は、攻撃者によるデータの盗聴や改ざんのリスクを高めます。
- 互換性の問題: TLS 1.1は、古いバージョンであり、現代のセキュリティ要件に対応していない場合があります。一部のモダンなブラウザやアプリケーションは、TLS 1.1をサポートしていないこともあります。そのため、TLS 1.1が有効になっている場合、これらのクライアントが正常に通信を確立できない可能性があります。
- 暗号アルゴリズムの制約: TLS 1.1では、現代のセキュリティ要件に対応するための強力な暗号アルゴリズムが制限されています。セキュリティが弱い暗号アルゴリズムの使用は、攻撃者による解読や暗号化の回避のリスクを高めます。
これらの理由から、TLS 1.1を有効にすることは、セキュリティ上のリスクを引き起こす可能性があります。より強力なセキュリティを提供するためには、TLS 1.2以上のバージョンを使用することが推奨されています。ちなみにMicrosoftは2020年にTLS 1.0とTLS 1.1のサポートを終了していますが、これはTLS 1.0とTLS 1.1のセキュリティ上の脆弱性を懸念し、より強力な暗号化とセキュリティ機能を提供するTLS 1.2以上の使用を推奨するための措置です。
TLS1.1を無効化する方法
TLS1.1の使用をやめ、TLS1.2やTLS1.3などの使用を強制するためには、Nginxの場合ssl_protocolsディレクティブからTLSv1.1の記述を削除する必要があります。ssl_protocolsディレクティブにTLSv1.3しかなければTLS1.3のみを使用しますし、TLSv1.2とTLSv1.3があればTLS1.2とTLS1.3を使用するという仕組みです。
TLS1.1が有効になっているということは、ssl_protocolsの箇所にTLSv1.1が記載されているという事なので、TLSv1.1の記述を削除することで無効化できます。
変更前:TLSv1.1が設定されていることにより、TLS1.1での通信が有効化されてしまう。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
変更後:TLSv1.1を削除したことにより、TLS1.2以上でしか通信が行われずセキュリティが強化される。
ssl_protocols TLSv1.2 TLSv1.3; #TLSv1.1が削除されたので、TLS1.2以上が有効になる
TLS1.3のみ使用したい場合は、TLSv1.3だけを記載すればいいです。
ssl_protocols TLSv1.3;
TLS設定の際のガイドライン
TLSに関する設定ガイドラインでは、TLS1.1以下を使用する設定を「Old:古い設定」、TLS1.2以上の使用に限定する設定を「Intermediate:中くらいの設定」、TLS1.3のみの使用に限定する設定を「Modern:モダンな設定」としています。これらはMozillaが提供する、SSL Configuration GenerratorのMozilla Configurationを参照する事でわかります。
SSL Configuration Generatorを使うと、細かい事を抜きにして、「古い設定」、「中くらいの設定」、「モダンな設定」のそれぞれのレベルに準拠したサーバーファイルの構成を自動生成してくれるので、手っ取り早くモダンなセキュリティ標準に準拠したサーバーファイル設定のテンプレートを得ることができます。
以下はSSL Congiguration Generatorで生成した「Modern」なNginx設定です。
# generated 2023-06-01, Mozilla Guideline v5.7, nginx 1.17.7, OpenSSL 1.1.1k, modern configuration
# https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=modern&openssl=1.1.1k&guideline=5.7
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# modern configuration
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
# replace with the IP address of your resolver
resolver 127.0.0.1;
}
モダンな設定だと、古いシステムを使用しているユーザーからのアクセスをブロックする可能性があるため、少し厳し目な設定とされており、Intermediateが万人向けの設定とされています。しかしセキュリティを最高に高めることにプライオリティがある場合は、Modernの設定が推奨されています。