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_certificate
とssl_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件のピンバック
WindowsなnginxでTLS1.3を喋らせる | たさなんぶろぐ
コメントは現在停止中です。