GNU/Linux >> Linux の 問題 >  >> Linux

ApacheまたはNginxでSSL/TLSの完全転送秘密を有効にする方法

この記事では、Perfect Forward Secretcy(PFS)の概要と、Apache®またはNginx®WebサーバーでPFSを有効にする方法について説明します。

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を実装しています 。

Apacheの説明

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を正しく実装できます。

コメントや質問をするには、[フィードバック]タブを使用します。また、私たちと会話を始めることができます。


Linux
  1. NGINXとは何ですか?それはどのように機能しますか?

  2. NGINXでHTTP2を有効にする方法

  3. NginxとApacheでHSTS(HTTP Strict Transport Security)ポリシーを有効にする方法

  1. Ubuntu20.04でApache2を使用してHTTPSプロトコルを有効にする方法

  2. CentOS / RHEL :Apache の SSL を有効にする方法

  3. SSL キーのアクセス許可?

  1. RedHatでApachehttpdを使用してSSL/TLSを設定する方法

  2. NginxでHTTP/2を有効にする方法

  3. NginxでTLS1.3を有効にする方法