この記事では、Perfect Forward Secretcy(PFS)の概要と、Apache®またはNginx®WebサーバーでPFSを有効にする方法について説明します。
PFSとは何ですか?
PFSは、秘密鍵が危険にさらされた場合でも、クライアントとサーバー間で共有されるデータを保護します。これは、行われたトランザクションごとにセッション鍵を生成することで実現できます。
TLSまたはSSL証明書は、公開鍵と秘密鍵を使用して機能します。 Webブラウザとサーバーがキーを交換する場合、システムはRSAと呼ばれるキー交換メカニズムを使用してセッションキーを作成します。このメカニズムでは、クライアントとサーバー間のすべての情報が暗号化されます。 RSAは、サーバーの秘密鍵と、一意のセキュアセッションごとに作成されたセッション鍵との間にリンクを作成します。
セッションはブルートフォース攻撃を受ける可能性があります。これは、正しいキーが見つかるまでセキュリティキーの組み合わせをサーバーに注入する攻撃で構成されます。このプロセスには長い時間がかかる可能性がありますが、サーバーの秘密鍵が危険にさらされている場合、攻撃者はセッションデータとすべてのクライアントトランザクションの両方を見ることができます。
PFSがWebサイトを保護する方法
PFSを使用すると、サーバーは単一のセッションキーに依存しなくなります。ユーザーまたはサービスが接続を確立するたびに同じ暗号化キーを使用する代わりに、PFSは接続ごとに一意のセッションキーを生成します。
交換メカニズムを使用してPFSを有効にする— Ephemeral Diffie-Hellman (DHE)
およびElliptic Curve Diffie-Hellman (ECDHE)
。攻撃者がセッションキーをブルートフォース攻撃した場合、攻撃者はその1つのセッションからの情報のみを復号化でき、他のセッションからは復号化できません。
WebサーバーにPFSを実装するための要件
次のツールのいずれかを使用して、PFSを実装します。
- OpenSSL 1.0.1c +
- Apache2.4または
- Nginx1.0.6+および1.1.0+
次のコマンドを実行して、これらのパッケージのバージョンを確認できます。
注 :ベンダーが新しいバージョンをリリースすると、結果が異なる場合があります。
[root@rackspace-test ~]$ openssl version
OpenSSL 1.1.1g FIPS 21 Apr 2020
[root@rackspace-test ~]$ httpd -v
Server version: Apache/2.4.37 (centos)
Server built: Nov 4 2020 03:20:37
Debian®またはUbuntu®オペレーティングシステムサーバーの場合、コマンドはapache2ctl -v
です。 。
[root@rackspace-test ~]$ nginx -v
nginx version: nginx/1.14.1
SSLプロトコル構成
次のセクションのコマンドを実行して、SSLが実装されているWebサイトを確認してください。
これらのサンプルは、 example.comというドメインにPFSを実装しています 。
SSL証明書が設定されているWebサイトを確認するには2つのオプションがあります。
[root@rackspace-test ~]# grep -ir "SSLEngine" /etc/httpd/
/etc/httpd/conf.d/example.com.conf: SSLEngine on
注: Apache仮想ホストのデフォルトパスは、ディレクトリ /etc/httpd/conf.d/の下にあります。 。ディレクトリは構成によって異なる場合があります。
または、コマンドhttpd -S
を使用できます またはapachectl -S
CentOS®またはRedHat®EnterpriseLinux®(RHEL)およびapache2ctl -S
の場合 DebianまたはUbuntuオペレーティングシステムの場合。
[root@rackspace-test ~]# httpd -S | grep 443
*:443 is a NameVirtualHost
port 443 namevhost www.example.com (/etc/httpd/conf.d/example.com.conf:10)
お気に入りのテキストエディタを使用して、次のパラメータを仮想ホスト構成に追加します。
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
SSLという単語を検索する場合 vhostでは、出力は実装後の次のようになります。
[root@rackspace-test ~]# egrep 'SSL' /etc/httpd/conf.d/example.com.conf
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
SSLCertificateFile /etc/ssl/certs/2022-example.com.crt
SSLCertificateKeyFile /etc/ssl/private/2022-example.com.key
構文が正しいことを確認して、Apacheを再起動してください。
[root@rackspace-test ~]# httpd -t
Syntax OK
[root@rackspace-test ~]# apachectl -k restart
Nginxの説明
SSL証明書がインストールされているWebサイトを一覧表示します:
[root@rackspace-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/
/etc/nginx/conf.d/example.com.conf: listen 443 ssl;
/etc/nginx/conf.d/example.com.conf: ssl_certificate /etc/ssl/certs/2022-example.com.chained.crt;
/etc/nginx/conf.d/example.com.conf: ssl_certificate_key /etc/ssl/private/2022-example.com.key;
注: Nginxブロックのデフォルトのパスは、ディレクトリ /etc/nginx/conf.d/の下にあります。 。ディレクトリは構成によって異なる場合があります。
お気に入りのテキストエディタを使用して、次のパラメータを仮想ホスト構成に追加します。
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
SSLという単語を検索する場合 vhostでは、出力は実装後の次のようになります。
[root@racksapce-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/example.com.conf
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_certificate /etc/ssl/certs/2022-example.com.chained.crt;
ssl_certificate_key /etc/ssl/private/2022-example.com.key;
構文が正しいことを確認し、Nginxを再起動します。
[root@rackspace-test ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@rackspace-test ~]# nginx -s reload
上記の手順を使用すると、WebサイトにPFSを正しく実装できます。
コメントや質問をするには、[フィードバック]タブを使用します。また、私たちと会話を始めることができます。