Perfect Forward Secrecy の設定

前回の記事で、PFSについて話したので、今回は実際にサーバーへの導入方法について説明します。

導入と言っても何かをインストールしたりするわけではなく(SSL/TLSが導入されている前提)、"ssl.conf"ファイルを編集するだけです。

やりたいことは、①利用するSSLプロトコルのヴァージョン指定、②クライアント^サーバー間で利用する暗号化アルゴリズムの指定、③サーバー側のSSL/TLS設定を優先させるように指定、の3つです。

ではやっていきます。

 

"ssl.conf"のデフォルトフルパスは

CentOSだと「/etc/httpd/conf.d/ssl.conf」

Ubuntuだと「/etc/apache2/mods-available/ssl.conf」

です。

 

"ssl.conf"の中身を見ていくと、SSLProtocol , SSLCipherSuite , SSLHonorCipherOrder という文字列があるはずです。

それぞれ、

SSLProtocol がバージョンの指定

SSLCipherSuite が暗号化アルゴリズムの指定

SSLHonorCipherOrder が優先設定の指定

になります。

 

まず、SSLProtocol ですが、"SSLv2","SSLv3","TLSv1","TLSv1.1","TLSv1.2" のそれぞれの頭に"+"をつけると利用可、"-"を付けると利用不可になります。また、"all"を指定すると全てのプロトコルが利用可能になります。

TLSのみ利用する場合は

SSLProtocol all -SSLv2 -SSLv3

 という感じになります。SSLには脆弱性があるので、TLSを利用しましょう。また、さらに強固にするのであれば、TLSv1とTLSv1.1も不可にしTLSv1.2のみの利用にすると良いです。

 

続いて、SSLCipherSuite ですが、利用する暗号化アルゴリズムの組み合わせを羅列します。サーバーにて利用可能なアルゴリズムは、openssl ciphers -v と打つと一覧で見れます。

PFSに対応する暗号化アルゴリズムは、"ECDHE"と"DHE"を利用した組み合わせです。ですので、この2つが入っている組み合わせを一覧の中から探し、それを羅列する形になります。

以下が例です。

SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA

それぞれどんなアルゴリズムかわからない人は、上のをコピペでいいと思います。(いらないのが幾つかあります。たぶん。)

 

最後に、SSLHonorCipherOrder です。これを入れると、サーバー側でのSSL/TLSの設定を優先させることができます。上でせっかく設定したので、忘れずに入れましょう。(実際、サーバー側の設定で暗号通信することがほとんどなので、もしかするといらないかも?)

SSLHonorCipherOrder

頭の # を消すだけでOKです。

 

以上がサーバーにPFSを導入する方法になります。

これであなたも"SSL/TLS"マスターだ!

 

余談だけど、DH鍵共有って仕組みが結構面白いから、時間あったら調べてみることをオヌヌメします。

 

【参考文献】

1)ディフィー・ヘルマン鍵共有