ウェブサイト脆弱性:TSL1.0を無効化する方法と必要な理由
2023年5月31日
この記事では、TLS 1.0の無効化と、最新のセキュリティプロトコルへの移行方法を詳しく解説し、TLS 1.0の脆弱性やリスク、無効化するためのNginxでの設定手順を紹介し、セキュリティを強化するためのガイドラインを提供します。Mozilla SSL Configuration Generatorを使ってモダンなTLS設定を簡単に導入する方法もカバーし、サイトの安全性を最大化するための実践的な情報をお届けします。
日本の上場企業3715社の公式サイトのTSL1.0対応率 出典: 日本の上場企業3715社の公式サイトのSSL/TLSセキュリティ脆弱性ダッシュボード
TLS1.0が有効になっている事の何が問題なのか
TLS 1.0はセキュリティプロトコルの一つであり、ウェブブラウザやサーバー間の通信を保護するために使用されます。しかし、TLS 1.0は既に古くなり、脆弱性が存在するため、安全な通信を保証するには不十分です。以下に、TLS 1.0が有効になっている場合の問題点を説明します。
- セキュリティ上の脆弱性: TLS 1.0は、現代の攻撃技術に耐えるためのセキュリティ要件を満たしていません。具体的には、TLS 1.0にはPOODLE(Padding Oracle On Downgraded Legacy Encryption)と呼ばれる深刻な脆弱性が存在し、攻撃者が通信を傍受し、暗号化された情報を解読できる可能性があります。
- 新しいセキュリティ機能の欠如: TLS 1.0は、現在のセキュリティ標準であるTLS 1.2およびTLS 1.3に比べて、多くの新しいセキュリティ機能を欠いています。例えば、TLS 1.2以降では、より強力な暗号スイートや改善されたハッシュ関数がサポートされており、より堅牢なセキュリティを提供します。
- 機能制限: TLS 1.0を使用している場合、一部の新しいウェブサイトやアプリケーションで正常にアクセスできない場合があります。多くの主要なウェブブラウザやサービスプロバイダーは、TLS 1.0を廃止し、より新しいバージョンを要求するようになっています。そのため、TLS 1.0が有効になっている場合、一部のウェブサイトやサービスへのアクセスが制限される可能性があります。
TLS 1.0が有効になっていることは、セキュリティ上のリスクを増加させ、現代のセキュリティ要件に満たない可能性があるため、問題とされています。セキュリティを向上させるためには、TLS 1.0の使用を廃止し、より新しいバージョンのTLSプロトコルを使用することが推奨されます。
ちなみにMicrosoftは2020年にTLS 1.0とTLS 1.1のサポートを終了していますが、これはTLS 1.0とTLS 1.1のセキュリティ上の脆弱性を懸念し、より強力な暗号化とセキュリティ機能を提供するTLS 1.2以上の使用を推奨するための措置です。
TLS1.0を無効化する方法
TLS1.0の使用をやめ、TLS1.2やTLS1.3などの使用を強制するためには、Nginxの場合ssl_protocolsディレクティブからTLSv1やTLSv1.1の記述を削除する必要があります。ssl_protocolsディレクティブにTLSv1.3しかなければTLS1.3のみを使用しますし、TLSv1.2とTLSv1.3があればTLS1.2とTLS1.3を使用するという仕組みです。
TLS1.0が有効になっているということは、ssl_protocolsの箇所にTLSv1が記載されているという事なので、TLSv1の記述を削除することで無効化できます。
変更前:TLSv1が設定されていることにより、TLS1.0での通信が有効化されてしまう。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
変更後:TLSv1を削除したことにより、TLS1.1以上でしか通信が行われずセキュリティが強化される。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #TLSv1が削除されたので、TLS1.1以上が有効になる
上記の例ではTLS1.0の無効化方法を解説するため、便宜的にTLS1.1を設定に残しています。しかし現代のセキュリティ標準では、TLS1.2未満を使用すべきではないとされているので、実運用面では、TLSv1.2とTLSv1.3以外を記述すべきではありません。
実運用設定
ssl_protocols TLSv1.2 TLSv1.3;
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 Configuration Generratorで生成した「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の設定が推奨されています。