Linuxnginxでは、設定ファイル(nginx.conf)でSSL/TLSに使用する暗号化スイートを指定することができますが、TLS1.3の暗号スイートを設定するのに苦労したので、手順を残しておきます。1.15.6前提知識TLS1.3で利用できる暗号スイートは5種類TLS1.2以前と比較して種類が減り、表記も短くなったので非常にすっきりとしています。先頭に加わり、鍵交換アルゴリズムと公開鍵アルゴリズムの指定がなくなりました。上の2つはTLS1.2でもお馴染みの、共通鍵にAESを利用した暗号スイートです。暗号利用モードがCCMのものは、量子コンピュータによる将来的な攻撃への耐性をもつ暗号利用モードとして新たに追加された暗号スイートです。現状のところ使う意味は薄いと思われます。TLS_CHACHA20_POLY1305_SHA256は、AESのハードウェア支援(AES-NI)が効かないモバイル機器等でのスループット向上が期待できます。Webサーバとしてこれを利用することを考えたとき、スマホからのアクセスが多くを占めるサイトであれば一考の余地があるかもしれません。暗号スイートについて考えることおそらく、一般的なWebサーバでは以下の2点になると思われます。1.15.6)のnginxではTLS1.3が利用できます。1.1.1]に書いた通りですが、このままではTLS1.3の暗号スイートが設定できません。言うより、設定しても設定内容が認識されずに既定値に置き換わってしまうようです。既定値は、TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256TLS_AES_128_GCM_SHA256となっています。現状nginxでTLS1.3の暗号スイートを明示的に設定するには、nginxをビルドするときに使うOpenSSLにパッチを当てるという方法があります。具体的な方法を以下に示します。patch各種ソースのダウンロードnginx最新版のダウンロードURLは、https://nginx.org/en/download.htmlより確認してください。1.1.1リリース時まで戻します。元のOpenSSLのコードとの差分が記述されています。コマンドを使って、これをソースコードに適用します。openssl-1.1.1-patchednginxのビルド先ほどパッチを当てたOpenSSLを使ってnginxをビルドします。1.1.1]とほぼ同じ手順なのでそちらを参照。--with-openssl=/usr/local/src/openssl-1.1.1-patched設定方法nginxが無事起動したら、SSL関連の設定を設定ファイルに記述していきます。続いて暗号スイートを設定しますが、パッチを当てている関係で指定方法が少し異なります。暗号利用モードがCCMのものは設定できませんでした。指定方法TLS_AES_256_GCM_SHA384TLS13+AESGCM+AES256TLS_AES_128_GCM_SHA256TLS13+AESGCM+AES128TLS_CHACHA20_POLY1305_SHA256TLS13+CHACHA20サンプル設定例(SSL関連部分のみ)最低限の設定例です。TLS1.3と1.2の暗号化スイートを混ぜて指定することができます。先に指定されたものが優先的に使用されます。on;}参考パッチについてのより詳細な情報は、https://github.com/hakasenyang/openssl-patchを参照してください。ちなみにリンクのページでは、このほかにもOpenSSLとnginxに関する便利なパッチが色々と配布されています。nginxをドラフト版のTLS1.3にも対応させるパッチなどがあります。コメントをキャンセル質問・感想などお気軽にどうぞ。*が付いている項目は入力必須です。メールアドレス以外の項目が公開されます。スパム防止のため、コメント反映まで少々時間がかかります。一部環境でワーカープロセスのメモリ公開の脆弱性への対応などリンクGitHubアカウントを開設しました!当ブログ内で取り上げたコードなどを上げています。