HTTPSは、2018年8月にIETF(RFC 8446)によってTLS 1.3がリリースされたおかげで、より高速で安全になりました。TLS1.3は、TLSプロトコルの最新バージョンになりました。このチュートリアルでは、Ubuntu18.04およびUbuntu16.04のNginxWebサーバーでTLS1.3を有効にする方法を説明します。
更新 :TLS1.3を有効にする簡単な方法があります。この記事を参照してください:Ubuntu 18.10、18.04、16.04、14.04のNginxでTLS1.3を簡単に有効にする方法
TLS 1.3:パフォーマンスとセキュリティの向上
パフォーマンス面では、TLS1.2はHTTPS接続を確立するために2回のラウンドトリップが必要です。 TLS 1.3では、1回のラウンドトリップのみが必要です。 TLS 1.3は、ゼロラウンドトリップモード(0-RTTセッション再開)もサポートしているため、以前にWebサイトに接続したことがあるクライアントは、最初のメッセージでHTTP要求をサーバーに送信できます。これは、モバイルネットワークや遠く離れた場所にいるユーザーにとって大きな違いになります。
セキュリティの観点から、TLS 1.3は、ROBOT攻撃などのエクスプロイトの原因となる古い暗号スイートのサポートを削除しました。そのため、サーバー管理者はTLS 1.3に古い暗号スイートを追加して、古いWebブラウザーのユーザーをなだめることができなくなりました。もちろん、これは過度に単純化された説明です。 CloudFlareにはTLS1.3の詳細な説明があります。
Ubuntu 18.04、Ubuntu16.04のNginxでTLS1.3を有効にする
NginxでTLS1.3を有効にする場合、2つの要件があります。
- NginxのバージョンはTLS1.3をサポートしている必要があります。これは、nginx1.13以降を意味します。
- Nginxは、OpenSSL 1.1.1以降でビルドするか、OpenSSL1.1.1以降で実行する必要があります。
2番目の要件は紛らわしいように聞こえるかもしれませんので、2つの例を挙げましょう。
- Ubuntu18.04にはOpenSSL1.1.0が付属しています。システムのOpenSSLライブラリを置き換えることはお勧めできませんが、OpenSSL 1.1.1ソースコードをダウンロードし、OpenSSL1.1.1ソースコードでNginxをコンパイルしてTLS1.3を有効にすることができます。
- ArchLinuxには現在OpenSSL1.1.1が同梱されていますが、ArchリポジトリのNginxパッケージは実際にはOpenSSL1.1.0で構築されています。この場合、NginxはOpenSSL 1.1.1で構築されていませんが、OpenSSL1.1.1で実行されます。
次に、Ubuntu18.04およびUbuntu16.04でOpenSSL1.1.1を使用してNginxをコンパイルする方法を見てみましょう。
1。公式Nginxリポジトリの追加
ソースtarballをダウンロードして、make
でコンパイルする代わりに 、公式のNginxリポジトリをUbuntuサーバーに追加してから、ソースコードからdebパッケージを作成します。このように、構成パラメーターの長いリストをconfigure
に手動で追加する必要はありません。 指図。また、debパッケージには便利なsystemdサービスファイルが含まれています。
まず、Nginx GPGキーを取得し、Ubuntuにインポートします。
wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key
次に、Nginxリポジトリのソースリストファイルを作成します。
sudo nano /etc/apt/sources.list.d/nginx.list
次の2行をファイルに追加します。 deb-src
lineを使用すると、apt source
を使用してNginxソースパッケージをダウンロードできます。 指図。 Bonic
Ubuntu18.04のコードネームです。 Ubuntu 16.04を使用している場合は、xenial
に置き換えてください。 。 (注:このリポジトリは32ビットOSをサポートしていません。)
deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
Nanoテキストエディタでファイルを保存するには、Ctrl+O
を押します。 、Enterキーを押して確認します。終了するには、Ctrl+X
を押します 。次に、ローカルパッケージインデックスを更新します。
sudo apt update
これで、Nginx公式リポジトリがUbuntuサーバーに追加されました。
2。 NginxとOpenSSLのソースコードをダウンロードする
nginx
を作成します /usr/local/src/
の下のディレクトリ Nginxソースを保存してからcd
そのディレクトリに。
sudo mkdir /usr/local/src/nginx cd /usr/local/src/nginx/
以下のコマンドでNginxソースパッケージをダウンロードします:
sudo apt install dpkg-dev sudo apt source nginx
ダウンロードしたファイルを確認してください。
ls
出力:
nginx-1.15.3 nginx_1.15.3-1~bionic.dsc nginx_1.15.3-1~bionic.debian.tar.xz nginx_1.15.3.orig.tar.gz
次に、OpenSSLgithubリポジトリのクローンを作成します。
cd /usr/local/src sudo apt install git sudo git clone https://github.com/openssl/openssl.git cd openssl
次に、すべてのブランチを一覧表示し、1.1.1安定ブランチに切り替えます。
git branch -a sudo git checkout OpenSSL_1_1_1-stable
3。 Nginxコンパイルルールを編集する
Nginxコンパイルルールファイルを編集します。
sudo nano /usr/local/src/nginx/nginx-1.15.3/debian/rules
config.status.nginx: config.env.nginx
を見つけます セクション。 CFLAGS行の最後に次のテキストを追加します。次のテキストはそれ自体が行ではないことに注意してください。
--with-openssl=/usr/local/src/openssl
ファイルを保存して閉じます。
4。 Nginxをコンパイルする
Nginxソースディレクトリにいることを確認してください。
cd /usr/local/src/nginx/nginx-1.15.3/
依存関係をインストールして、Nginxdebパッケージをビルドします。
sudo apt build-dep nginx
次のコマンドを使用して、debパッケージをビルドします。
sudo dpkg-buildpackage -b
次のエラーが表示された場合は、
missing initializer for field 'md_ctrl' of 'EVP_MD {aka const struct evp_md_st}
次に、auto/cc/gcc
を編集します ファイル。
sudo nano /usr/local/src/nginx/nginx-1.15.3/auto/cc/gcc
次の行をコメントアウトします。 -Werror
フラグにより、GCCは警告をエラーとして扱います。
CFLAGS="$CFLAGS -Werror"
次に、ビルドコマンドを再実行します。ビルドが完了すると、/usr/local/src/nginx/
にNginxdebパッケージが作成されます。 ディレクトリ。以前にNginxをインストールしたことがある場合は、古いバージョンを削除してから新しいバージョンをインストールします。
sudo apt remove nginx nginx-common nginx-full cd /usr/local/src/nginx/ sudo dpkg -i nginx_1.15.3-1~bionic_amd64.deb
それでは、Nginxを起動しましょう。
sudo systemctl start nginx
次のエラーメッセージが表示された場合。
Failed to start nginx.service: Unit nginx.service is masked.
次に、nginxのマスクを解除し、startコマンドを再度発行します。
sudo systemctl unmask nginx
Nginxプロセスはユーザーnginx
として実行される可能性があることに注意してください またはwww-data
。これは、/etc/nginx/nginx.conf
の最初の行を編集することで変更できます ファイル。 NginxがPHP-FPMと同じユーザーとして実行されていることを確認してください。
次に、Nginxの構成引数を確認します。
sudo nginx -V
ご覧のとおり、OpenSSL1.1.1で構築された最新バージョンのNginxがあります。
5。 NginxサーバーブロックでTLS1.3を有効にする
ここで、Nginxサーバーブロックに対してHTTPSをすでに有効にしていると仮定します。 TLS1.3を有効にする構文はかなり簡単です。 /etc/nginx/conf.d/
にあるNginxサーバーブロックファイルを開きます ディレクトリまたは/etc/nginx/sites-enabled/
ディレクトリ。次の行を見つけます。
ssl_protocols TLSv1.2;
TLSv1.3
を追加します プロトコルのリストに。
ssl_protocols TLSv1.2 TLSv1.3;
次に、次の3つの暗号スイートを既存の暗号スイートに追加します。
TLS-CHACHA20-POLY1305-SHA256 TLS-AES-256-GCM-SHA384 TLS-AES-128-GCM-SHA256
そのように:
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ファイルを保存して閉じます。次に、Nginx構成をテストしてリロードします。
sudo nginx -t sudo systemctl reload nginx
Ubuntu18.04がOpenSSL1.1.1に切り替わる可能性は低いため、sudo apt upgrade
を使用してNginxをアップグレードする場合 コマンドを実行すると、TLS1.3はなくなります。 Nginxがapt
によってアップグレードされないようにすることをお勧めします このコマンドで:
sudo apt-mark hold nginx
更新:Nginx 1.15.4以降、sslサーバーコンテキストに次のディレクティブを追加することで、OpenSSLで0-RTTを有効にできます。デフォルト値はoff
に設定されています 。以前のバージョン1.15.3では、BoringSSLでのみ使用できます。
ssl_early_data on
GoogleChromeでTLS1.3を有効にする
現在、Firefox62とChrome69はTLS1.3のドラフト28のみをサポートしています。 OpenSSL 1.1.1は、TLS1.3の最終バージョンをサポートします。ドラフトバージョンと最終RFCバージョンに基づく実装は相互運用できません。
Nginxサーバーを今すぐテストするには、Google Chromeのベータ版をインストールし、TLS1.3の最終バージョンを有効にする必要があります。 Chromeベータ版をインストールしたら、chrome://flags/#tls13-variant
と入力します アドレスバーでdefault
から切り替えます Enabled (Final)
へ 。次に、変更を有効にするためにGoogleChromeを再起動します。
次に、GoogleChromeベータ版でTLS1.3対応のウェブサイトにアクセスし、Ctrl+Shift+I
を押します。 開発者ツールのページを開きます。 Security
に移動します タブ。使用中のTLSのバージョンを確認できます。
Firefoxは、2018年10月に予定されているFirefox63でTLS1.3の最終バージョンを出荷すると言われています。Chrome70では、TLS1.3の最終バージョンが発信接続に対して有効になります。
更新:Chrome70はTLS1.3の最終バージョンのサポートを追加しましたが、デフォルトではTLS1.3のドラフト28を引き続き使用しています。CloudFlareでTLS1.3を有効にする
CloudFlare CDN(コンテンツ配信ネットワーク)を使用している場合、WebサイトはすでにTLS1.3を使用しています。 CloudFlareダッシュボードで、crypto
を選択します タブをクリックすると、TLS1.3を有効/無効にするオプションが表示されます。 0-RTTを有効にすることもできます。 CloudFlareはドラフト28バージョンと最終バージョンの両方をサポートしています。
それでおしまい!このチュートリアルが、Ubuntu18.04およびUbuntu16.04のNginxでTLS1.3を有効にするのに役立つことを願っています。気をつけて。