前回の記事では、2018年8月に正式にリリースされたTLS 1.3プロトコルを有効にするために、OpenSSL 1.1.1でNginxソースコードをコンパイルする手順を説明しました。このチュートリアルでは、TLS1.3を有効にする簡単な方法を紹介します。 Ubuntu 20.04、18.04、16.04の場合
TLS1.3によりパフォーマンスとセキュリティが向上します
パフォーマンス面では、TLS1.2はHTTPS接続を確立するために2回のラウンドトリップが必要です。 TLS 1.3では、1回のラウンドトリップのみが必要です。 TLS 1.3は、ゼロラウンドトリップモード(0-RTTセッション再開)もサポートしているため、以前にWebサイトに接続したことがあるクライアントは、最初のメッセージでHTTP要求をサーバーに送信できます。これは、モバイルネットワークや遠く離れた場所にいるユーザーにとって大きな違いになります。
セキュリティの観点から、TLS 1.3は、ROBOT攻撃などのエクスプロイトの原因となる古い暗号スイートのサポートを削除しました。もちろん、これは過度に単純化された説明です。 CloudFlareにはTLS1.3の詳細な説明があります。
TLS1.3を有効にするための要件
NginxでTLS1.3を有効にする場合、2つの要件があります。
- NginxのバージョンはTLS1.3をサポートしている必要があります。これは、Nginx1.13以降を意味します。
- NginxはOpenSSL1.1.1以降でビルドする必要があります。
Ubuntu18.04および20.04にはOpenSSL1.1.1が付属しています
OpenSSL1.1.1はUbuntu18.10および20.04リポジトリに含まれており、Ubuntu 18.10/20.04リポジトリのNginxパッケージはOpenSSL1.1.1で構築されています。
Ubuntu 18.04が最初にリリースされたときは、OpenSSL1.0.2のみが付属しています。ただし、OpenSSL1.1.1はUbuntu18.04.3にバックポートされています。
まだUbuntu18.04.2を使用している場合は、次のコマンドを実行して18.04.3にアップグレードしてください。
sudo apt update sudo apt upgrade
OpenSSL1.1.1で構築された最新バージョンのNginxをUbuntu16.04にインストールする
Ubuntu 16.04リポジトリのNginxパッケージは、OpenSSL1.1.1でビルドされていません。 OpenSSL 1.1.1を使用してNginxを手動でコンパイルできますが、時間がかかり、新しいバージョンのNginxがリリースされたときに再コンパイルする必要があります。幸い、Debian開発者でDNSコミュニティの重要人物であるOndřejSurýによるPPA(パーソナルパッケージアーカイブ)からNginxをインストールできます。彼は、Apache、BIND、MariaDB、PHPなどを含むDebianリポジトリ用の多くのパッケージを管理しています。また、公式のcertbotPPAの管理者の1人でもあります。だから私は彼のPPAを信頼していて、それを私のサーバーで使用しています。
以前に別のNginxリポジトリ(nginx.orgなど)を追加したことがある場合は、それを無効にします。たとえば、/etc/apt/sources.list.d/nginx-repo.list
で定義された別のNginxリポジトリがあります ファイル。そのファイルのすべての行をコメントアウトして無効にします。
UbuntuにOndřejSurýNginxPPAを追加するには、次のコマンドを実行します。
sudo add-apt-repository ppa:ondrej/nginx sudo apt update
次に、既存のNginxパッケージを削除します。 (Nginx構成ファイルは削除されません。)
sudo apt remove nginx
iRedMailとNginxを使用する場合は、sudo apt remove nginx-full
を実行します。 Nginxを削除します。
そして、PPAからNginxをインストールします。
sudo apt install nginx
新しいバージョンの構成ファイルをインストールするかどうかを尋ねられたら、N
を選択します 。 certbot NginxプラグインはNginxと一緒に削除される可能性があるため、再度インストールしてください。
sudo apt install python3-certbot-nginx
Nginxのバージョンを確認してください。
sudo nginx -V
NginxがOpenSSL1.1.1で構築されていることがわかります。
nginx version: nginx/1.14.1 built with OpenSSL 1.1.1 11 Sep 2018 (running with OpenSSL 1.1.0g 2 Nov 2017) TLS SNI support enabled
このPPAは、Ubuntu16.04用のOpenSSL1.1.1も提供します。 Ubuntu16.04上のNginxがまだOpenSSL1.1.0で実行されている場合は、OpenSSLパッケージをアップグレードする必要があります。
sudo apt upgrade
Googleコンピューティングエンジンを使用している場合、上記のコマンドを実行しているときに次のメッセージが表示されることに注意してください。
The following packages have been kept back: libssl1.1 openssl
これは、OpenSSL1.1.1パッケージが一部のGoogleコンピューティングエンジンパッケージと競合しているためです。 OpenSSLをアップグレードするには、次のコマンドを実行する必要があります。
sudo apt dist-upgrade
Ubuntu 20.04、18.04、16.04のNginx仮想ホストでTLS1.3を有効にする
OpenSSL 1.1.1でNginxを入手したら、Nginx仮想ホストファイルを開きます。
sudo nano /etc/nginx/conf.d/site.conf
または
sudo nano /etc/nginx/sites-enabled/site.conf
TLS 1.3を有効にするには、TLSv1.3
を追加するだけです。 ssl_protocols
へ SSLサーバーブロックのディレクティブ。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
Let’s Encrypt証明書を使用している場合、SSL構成は/etc/letsencrypt/options-ssl-nginx.conf
で設定できます。 ファイル。ちなみに、certbotはデフォルトでTLSv1
を有効にします 、安全ではないので、削除できます。 iRedMailとNginxを使用している場合は、/etc/nginx/templates/ssl.tmpl
でSSL構成を編集する必要があります。 ファイル。
ファイルを保存して閉じます。次に、変更を有効にするためにNginxを再起動します。
sudo systemctl restart nginx
WebブラウザでのTLSバージョンの確認
Firefox 63以降を使用して、Webページをリロードし、空白の領域を右クリックして、View Page Info
を選択します。 コンテキストメニューで。 Security
に移動します タブをクリックすると、TLS1.3が使用されていることがわかります。
Google Chrome 70以降を使用して、サイトにWebページをリロードします。次に、Ctrl+Alt+I
を押します 開発者ツールを開きます。 Security
に移動します タブをクリックすると、TLS1.3が使用されていることがわかります。
TLSv1.3はCloudflareとオリジンサーバーの間で使用されていますか?
はい。 CloudflareはフロントエンドサーバーでTLS1.3をサポートし、オリジンサーバーに接続するときにTLSv1.3も使用します。使用されているTLSバージョンを確認するには、/etc/nginx/nginx.conf
でカスタムログ形式を作成できます。 ファイル。
sudo nano /etc/nginx/nginx.conf
http
に次のテキストを追加します コンテキスト。
log_format combined_ssl '$remote_addr - $remote_user [$time_local] ' '$ssl_protocol/$ssl_cipher ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
ファイルを保存して閉じます。次に、access_log
を追加します SSLserver
のディレクティブ コンテクスト。ログはcombined_ssl
にあります フォーマット。
access_log /var/log/nginx/your-site.access.log combined_ssl;
ファイルを保存して閉じます。次に、Nginxをリロードします。アクセスログファイルには、TLS1.3が使用されていることを示す以下のようなものが表示されます。
172.68.132.115 - - [25/Feb/2020:16:07:26 +0800] TLSv1.3/TLS_AES_256_GCM_SHA384 "GET / HTTP/1.1"
次のステップ
このチュートリアルが、Ubuntu 20.04、Ubuntu 18.04、およびUbuntu16.04のNginxでTLS1.3を有効にするのに役立つことを願っています。 Webサイトをハッキングから保護するためにModSecurityWebアプリケーションファイアウォールを設定することもできます。
- Debian/UbuntuでNginxを使用してModSecurityを設定する方法
いつものように、この投稿が役に立った場合は、無料のニュースレターを購読して、より多くのヒントやコツを入手してください。気をつけて🙂