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


TLS 1.3は、トランスポート層セキュリティ(TLS)プロトコルの最新バージョンであり、適切なIETF標準であるRFC 8446を使用した既存の1.2仕様に基づいています。これにより、以前のバージョンよりも強力なセキュリティとパフォーマンスの向上が実現します。

この記事では、有効なTLS証明書を取得し、ApacheまたはNginxWebサーバーでホストされているドメインで最新のTLS1.3バージョンプロトコルを有効にするためのステップバイステップガイドを示します。

  • Apache version 2.4.37 or greater.
  • Nginx version 1.13.0 or greater.
  • OpenSSL version 1.1.1 or greater.
  • A valid domain name with correctly configured DNS records.
  • A valid TLS certificate.

Let’sEncryptからTLS証明書をインストールする

Let’s Encryptから無料のSSL証明書を取得するには、Acme.shクライアントをインストールする必要があります。また、図に示すように、Linuxシステムに必要なパッケージをいくつかインストールする必要があります。

# apt install -y socat git  [On Debian/Ubuntu]
# dnf install -y socat git  [On RHEL/CentOS/Fedora]
# mkdir /etc/letsencrypt
# git clone https://github.com/Neilpang/acme.sh.git
# cd acme.sh 
# ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
# cd ~
# /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength 2048
# /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength ec-256

注:上記のコマンドの example.com を実際のドメイン名に置き換えてください。

SSL証明書をインストールしたら、以下で説明するように、ドメインでTLS1.3を有効にするためにさらに進むことができます。

NginxでTLS1.3を有効にする

上記の要件で述べたように、そのTLS1.3はNginx1.13バージョンからサポートされています。古いバージョンのNginxを実行している場合は、最初に最新バージョンにアップグレードする必要があります。

# apt install nginx
# yum install nginx

NginxのバージョンとNginxがコンパイルされたOpenSSLのバージョンを確認します(nginxのバージョンが1.14以上でopensslのバージョンが1.1.1であることを確認してください)。

# nginx -V
nginx version: nginx/1.14.1
built by gcc 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC) 
built with OpenSSL 1.1.1 FIPS  11 Sep 2018
TLS SNI support enabled
....

ここで、nginxのインストールを開始、有効化、確認します。

# systemctl start nginx.service
# systemctl enable nginx.service
# systemctl status nginx.service

次に、お気に入りのエディターを使用して、nginxvhost構成の /etc/nginx/conf.d/example.com.conf ファイルを開きます。

# vi /etc/nginx/conf.d/example.com.conf

次に示すように、 ssl_protocols ディレクティブを見つけて、行の最後にTLSv1.3を追加します。

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name example.com;

  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers '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';
  ssl_prefer_server_ciphers on;
}

最後に、構成を確認し、Nginxをリロードします。

# nginx -t
# systemctl reload nginx.service

ApacheでTLS1.3を有効にする

Apache 2.4.37以降、TLS1.3を利用できるようになりました。古いバージョンのApacheを実行している場合は、最初に最新バージョンにアップグレードする必要があります。

# apt install apache2
# yum install httpd

インストールすると、ApacheとApacheがコンパイルされたOpenSSLのバージョンを確認できます。

# httpd -V
# openssl version

ここで、nginxのインストールを開始、有効化、確認します。

-------------- On Debian/Ubuntu -------------- 
# systemctl start apache2.service
# systemctl enable apache2.service
# systemctl status apache2.service

-------------- On RHEL/CentOS/Fedora --------------
# systemctl start httpd.service
# systemctl enable httpd.service
# systemctl status httpd.service

次に、お気に入りのエディターを使用してApache仮想ホスト構成ファイルを開きます。

# vi /etc/httpd/conf.d/vhost.conf
OR
# vi /etc/apache2/apache2.conf

次に示すように、 ssl_protocols ディレクティブを見つけて、行の最後にTLSv1.3を追加します。

<VirtualHost *:443>
SSLEngine On

# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;

ssl_protocols TLSv1.2 TLSv1.3
ssl_ciphers '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';
ssl_prefer_server_ciphers on;
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

     ServerAdmin [email protected]
     ServerName www.example.com
     ServerAlias example.com
    #DocumentRoot /data/httpd/htdocs/example.com/
    DocumentRoot /data/httpd/htdocs/example_hueman/
  # Log file locations
  LogLevel warn
  ErrorLog  /var/log/httpd/example.com/httpserror.log
  CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/httpsaccess.log.%Y-%m-%d 86400" combined
</VirtualHost>

最後に、構成を確認し、Apacheをリロードします。

-------------- On Debian/Ubuntu -------------- 
# apache2 -t
# systemctl reload apache2.service

-------------- On RHEL/CentOS/Fedora --------------
# httpd -t
# systemctl reload httpd.service

サイトがTLS1.3を使用していることを確認する

ウェブサーバーを介して設定したら、Chrome70以降のバージョンのChromeブラウザ開発ツールを使用してサイトがTLS1.3プロトコルを介してハンドシェイクしていることを確認できます。

それで全部です。 ApacheまたはNginxWebサーバーでホストされているドメインでTLS1.3プロトコルを正常に有効にしました。この記事について質問がある場合は、下のコメントセクションでお気軽にお問い合わせください。