doudonn WEB制作やサーバーの話とかいろいろ

NginxのSSL設定(処理速度優先)

  doudonn 更新日:
NginxのSSL設定(処理速度優先)

NginxのSSL設定はどれが速いのか?

結局どれが良いのか?と迷う人は多いだろう。
自分も絶対これという自信は無いですが、多分最適な設定を紹介する。

※Nginxバージョン:1.22.1
※certbotバージョン:1.21.0

※「Let’s Encrypt」の「certbot」でデフォルト設定で証明書を発行した場合の設定です

1、nginx.conf

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_ciphers ECDHE+AESGCM:DHE+aRSA+AESGCM:ECDHE+AESCCM:DHE+aRSA+AESCCM:+AES256:ECDHE+CHACHA20:DHE+aRSA+CHACHA20:+DHE:ECDHE+AES128:ECDHE+CAMELLIA128:ECDHE+AES:ECDHE+CAMELLIA:+ECDHE+SHA:DHE+aRSA+AES128:DHE+aRSA+CAMELLIA128:DHE+aRSA+AES:DHE+aRSA+CAMELLIA:+DHE+aRSA+SHA;
ssl_conf_command Ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;

まず「nginx.conf」に全てのドメインに適用する共通設定を書きます。

certbotバージョン1.21.0だと、
暗号方式はデフォルトで「ecdsa」の「secp256r1」です。
この場合の設定なので注意ください。

2、doudonn.com.conf

server {
listen 443 ssl http2;
server_name doudonn.com www.doudonn.com;

ssl_certificate /etc/letsencrypt/live/doudonn.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/doudonn.com/privkey.pem;

#以後省略

各ドメインの設定ファイルは、
「ssl_certificate」と「ssl_certificate_key」だけ記載します。
ドメインごとに指定ファイルが違うためです。

3、なぜこのSSL設定なのか?解説


#キャッシュでの高速化は公式マニュアルでも推奨
#このためにメモリを10MB使用するようにします
ssl_session_cache shared:SSL:10m;

#サイトの滞在時間を考えて指定する。この場合は5分
ssl_session_timeout 5m;

#クライアント側の暗号よりもサーバー側の暗号を優先する。セキュリティ対策。
ssl_prefer_server_ciphers on;

#プロコトルを最新のものだけ指定。現時点の推奨設定。
ssl_protocols TLSv1.2 TLSv1.3;

#鍵交換に使うファイルを指定(作成要)
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

#下記2項目は使用する暗号方式の指定。TLSv1.3での推奨セキュリティ型です。
ssl_ciphers ECDHE+AESGCM:DHE+aRSA+AESGCM:ECDHE+AESCCM:DHE+aRSA+AESCCM:+AES256:ECDHE+CHACHA20:DHE+aRSA+CHACHA20:+DHE:ECDHE+AES128:ECDHE+CAMELLIA128:ECDHE+AES:ECDHE+CAMELLIA:+ECDHE+SHA:DHE+aRSA+AES128:DHE+aRSA+CAMELLIA128:DHE+aRSA+AES:DHE+aRSA+CAMELLIA:+DHE+aRSA+SHA;
ssl_conf_command Ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;

「ssl_dhparam」の作成はこちらの記事を見てください。
Ubuntu 22.04.1 LTS&NginxのロードバランサにLet’s EncryptのSSL証明書を取得し自動更新&同期する方法

それぞれの詳細は公式マニュアルを確認ください。

4、このSSL設定での証明書情報

このSSL設定での証明書情報 Protocol TLS 1.3 Key exchange X25519 Server signature RSA-PSS with SHA-256 Cipher AES_256_GCM

chromeならデベロッパーツールで確認できます。

基本は「TLS 1.3」。
そして、処理が軽い「X25519」と「AES_128_GCM」を指定。
「Let’s Encrypt」と「certbot」で取得するならこれが最適だと思います。

セキュリティを高めたい場合は「p-384」と「AES_256_GCM」を指定します。
certbotで「secp384r1」を指定して取得し、
「ssl_ciphers」と「ssl_conf_command」は下記を指定します。

ssl_ciphers ECDHE+AESGCM:DHE+aRSA+AESGCM:ECDHE+AESCCM:DHE+aRSA+AESCCM:ECDHE+CHACHA20:DHE+aRSA+CHACHA20:+AES128:+DHE;
ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256;

※参考サイト:https://kuni92.net/2022/02/nginx-chipers.html

4、NginxのSSL設定まとめ

暗号強度はワンランク下げて処理速度優先にすることをおすすめ。

ググって解説サイトを見ると、
ほぼ「高セキュリティ型(p-384とAES_256_GCM)」でのSSL設定解説になっています。
これにすると処理速度が落ちるため、同時アクセスを求める人などにはおすすめできない。
実際、Googleなど大きなサイトは処理速度優先(AES_128_GCM)の設定です。

それでも現時点はセキュリティ的に全く問題無く、
セキュリティを高くするのは将来に備えてという感じです。
個人サイトでそこまでやる必要は無いと考えます。

Nginxを速くしたい!な人は是非当記事の設定を使ってみてください。

Nginxの関連記事
サーバーの関連記事

記事一覧はこちら:サーバー

管理人について
doudonn
名前:doudonn(どうどん)
ひたすらWEB制作な人。
一応社長です。音ゲー好き

プロフィール
お知らせ

2022年11月30日に全記事削除しました。
無駄にページ表示速度にこだわってます。

役立ちサイト
wiki

プライバシーポリシー・広告について


© 2022-2024 doudonn All Rights Reserved.