ホームページに HTTPS でアクセスする際に利用されるプロトコルは SSL および TLS ですが、脆弱性がある SSL プロトコルでの接続は好ましくなく、また TLS プロトコルも v1.0 や v1.1 は脆弱性が発見されていています。 本稿では Apache httpd で WEB サーバーを構築した際に、特定のバージョンの SSL や TLS の待受けを制限する方法について解説します。
SSL/TLSのバージョンについて
まずは SSL と TLS のバージョンについて簡単に振り返ってみます。 HTTPS での接続を実現する SSL プロトコルは1990年代に発案され、1.0, 2.0, 3.0 とバージョンがアップデートされました。 その後 SSL を更に改良された TLS が発案され、1.0, 1.1, 1.2 とバージョンがアップデートされてきた歴史があります。
プロトコル | バージョン | 公開年 | ステータス |
---|---|---|---|
SSL | 1.0 | – (非公開) | 廃止 |
SSL | 2.0 | 1995年 | 廃止 |
SSL | 3.0 | 1996年 | 廃止 |
TLS | 1.0 | 1999年 | 非推奨 |
TLS | 1.1 | 2006年 | 非推奨 |
TLS | 1.2 | 2008年 |
WEBサービスを提供する側としては、できるだけ安全なサービスを提供したいですので、脆弱性が発見されている SSL や TLS 1.0, 1.1 でのサービスは極力避けたいところです。 しかし TLS 1.2 だけの接続を許可すると、今度は古いブラウザがアクセスできなくなってしまいますから、ご自身が提供しているサービスへの利用者が、どのような割合で古いブラウザを利用しているかを調査した上で TLS プロトコルのバージョンを制限することが望ましいでしょう。
Apache httpd での SSL/TLS バージョンの制限方法
それでは本題の Apache httpd で SSL/TLS のバージョンを制限する方法について解説します。 Apache httpd での SSL/TLS のバージョン指定は SSLProtocol ディレクティブで行います。 SSL/TLSの全てのバージョンの接続を許可する場合は次のように指定します。
SSLProtocol all
all を指定した場合は、SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2 を指定したことになります。 しかし前述の通り、SSL プロトコルは廃止されていますし、TLS 1.0, 1.1 は脆弱性がありますので、出来る限り利用したくありません。
もし TLS 1.2 だけの接続を許可したい場合は次のように指定します。
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
もしくは、次の指定でも TLS 1.2 だけの接続に制限できます。
SSLProtocol +TLSv1.2
このように、プロトコルのバージョン番号の前にある「+」「-」の記号で、そのバージョンを追加したり制限したりすることができます。なお2017年現在では、現実的に幅広いブラウザに対応するためには TLS 1.1 と TLS 1.2 を許可するのが良いかも知れません。
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
おわりに
本稿では Apache httpd で接続を許可する SSL/TLS プロトコルのバージョンを制限する方法について解説しました。 この設定は、新しい TLS プロトコルがリリースされたり、市場環境が変わった場合に随時見直しが必要な設定ですので、ぜひ覚えておきましょう。