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

Ubuntu18.04および16.04のNginxでTLS1.3を有効にする方法

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つの要件があります。

  1. NginxのバージョンはTLS1.3をサポートしている必要があります。これは、nginx1.13以降を意味します。
  2. 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を有効にするのに役立つことを願っています。気をつけて。


Ubuntu
  1. Ubuntu11.10にPHP5とMySQLを使用してNginxをインストールする方法

  2. Ubuntu 20.04 – Hweを有効にする方法は?

  3. Ubuntu で Wayland を有効または無効にする方法

  1. Ubuntu18.04でSSHを有効にする方法

  2. Ubuntu20.04にNginxをインストールして構成する方法

  3. UbuntuとCentOSのNginxでHTTP/2を有効にする方法

  1. Ubuntuでrootユーザーアカウントを有効または無効にする方法

  2. Ubuntu20.04でSSHを有効にする方法

  3. Ubuntu 18.04 /Debian9にNginxをインストールして構成する方法