TLSv1.3 & HTTP/2 対応なwebサーバー構築

Nginxを使ってTLSv1.3とHTTP/2に対応したナウいWebサーバーを構築していきたいと思います。

前提条件

  • Linux環境でMake出来る環境がある
  • 現時点で動いているNginxでSSLページを作ったことがある。

まぁCentOSの場合sudo yum groupinstal "Development Tools"とやればできますし、Ubuntu Serverでもsudo apt install build-essentialとやればmake出来る環境が出来上がります。

Archとか使ってる人は自分で調べて下さい。(というかそれを使ってる人達はココの場で書かなくても自分で出来る人でしょう)

既存のNginxの削除

パッケージマネージャで導入したNginxを削除します。
sudo (yum|apt) remove nginx
で削除して下さい。

必要なもののダウンロード

まずはNginxとOpenSSLのソースコードをダウンロードします。

Nginxは最新のmainlineを、OpenSSLはgitから落としてきます。

作業用のディレクトリを作成後、そこに移動して次のコマンドを実行して下さい。

wget http://nginx.org/download/nginx-1.13.9.tar.gz # Nginxのソースをダウンロード
tar xvfz nginx-1.13.9.tar.gz                       # Nginxの圧縮ファイルを解凍
git clone https://github.com/openssl/openssl.git   # OpenSSLのソースをGithubからクローン
cd openssl                                         # opensslディレクトリに移動
git checkout tls1.3-draft-18                       # tls1.3-draft-18ブランチにチェックアウト

ココで重要なのは最後の git checkout tls1.3-draft-18 の部分です。
ここでブランチを移動しておかないとmakeする時に失敗します。

NginxをMake

Nginxを解凍したディレクトリに移動して、makeするのですがその前にコンパイルオプションの指定を行います。

Nginxをソースからビルドするときの醍醐味はココの部分で自分に必要な機能を取捨選択できることです。

要らない機能をとことん削ることで、パフォーマンスの向上を望めます。

ここでのオプションは、私の例ですので実際に自環境で実施する場合は環境に合わせたオプションを選択して下さい。

(上記の続きであるopensslディレクトリから開始)
cd ../nginx-1.13.9
./configure --prefix=/etc/nginx \
--sbin-path=/usr/local/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-threads \
--with-file-aio \
--with-http_v2_module \
--with-openssl=../openssl \
--with-openssl-opt=enable-tls1_3
make -j4 # makeするときの同時ビルド数 実際のCPUスレッド数と同等か-1がオススメ

恐らくこれでmakeは正常終了するはずです。(正常終了しなかったらエラーを見て対処)

makeが正常終了したらsudo make installでシステムにインストールして下さい

nginx -Vを実行してバージョン情報などが表示されれば成功です。

systemdに登録

このままではLinux起動時にいちいち手動で実行しなければならないので、systemdに登録することで解決します。 /lib/systemd/system/nginx.service ファイルに次を入力して下さい。

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/sbin/nginx -t
ExecStart=/usr/local/sbin/nginx
Restart=always
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

記入したらsudo systemctl daemon-reloadコマンドを実行してファイルを読み直ししてからsudo systemctl enable nginxとコマンドを発行して自動起動を有効にして下さい。

Nginxの設定

Nginxの設定を行っていきます。/etc/nginx/nginx.confまたは’/etc/nginx/conf.d/ホニャララ.conf'(今まで自分が使ってた設定)を編集していきます。

まず、ssl_certificatessl_ciphersの設定以外のSSL関連の設定を全て削除もしくはコメントアウトして下さい。

そして次を入力して下さい

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_dhparam dhparam.pem;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;preload';
ssl_prefer_server_ciphers on;
ssl_ciphers 'TLS13-AES-256-GCM-SHA384 TLS13-AES-128-GCM-SHA256 TLS13-CHACHA20-POLY1305-SHA2
56 ECDHE !COMPLEMENTOFDEFAULT kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !DH !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
ssl_session_cache    shared:SSL:10m;
ssl_session_timeout  10m;

この後にsudo nginx -tを実行してエラーが出ないことを確認してからsudo systemctl startでNginxを起動して下さい。

これでTLSv1.3 & HTTP/2対応なWebサーバーが完成したはずです。

もしわからないことが有りましたら、コメントしていただければ対応可能な限りお答えいたしますのでご気軽に質問して下さい。

1件のピンバック

コメントする

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください