Apache httpd で接続を許すSSL/TLSのバージョンを制限する方法

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 ホームページに 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 とバージョンがアップデートされてきた歴史があります。

プロトコルバージョン公開年ステータス
SSL1.0– (非公開)廃止
SSL2.01995年廃止
SSL3.01996年廃止
TLS1.01999年非推奨
TLS1.12006年非推奨
TLS1.22008年

 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 プロトコルがリリースされたり、市場環境が変わった場合に随時見直しが必要な設定ですので、ぜひ覚えておきましょう。

Apache httpd 入門へ戻る

Apacheのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca