CLOVER🍀

That was when it all began.

OpenSSLでの暗号スむヌトず指定方法を確認するApache、nginxでのIPAガむド蚭定䟋含む

これは、なにをしたくお曞いたもの

Apacheやnginxの蚭定を芋おいお、Cipher Suiteに指定しおいる文字列の意味があんたりわかっおないなず思い。

この機䌚に、少し芋おおきたいな、ず。

環境

今回の環境は、こちら。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal


$ uname -srvmpio
Linux 5.4.0-81-generic #91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

OpenSSLのバヌゞョンは、こちら。

$ openssl version
OpenSSL 1.1.1f  31 Mar 2020

ApacheをHTTPS化SSLTLS化しおみる

詊しに、ApacheをむンストヌルしおHTTPS化しおみたしょう。

$ sudo apt install apache2
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl

デフォルトのSSLの蚭定はこちら。

$ grep -v '.*#' /etc/apache2/mods-enabled/ssl.conf
<IfModule mod_ssl.c>

    SSLRandomSeed startup builtin
    SSLRandomSeed startup file:/dev/urandom 512
    SSLRandomSeed connect builtin
    SSLRandomSeed connect file:/dev/urandom 512


    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl .crl

    SSLPassPhraseDialog  exec:/usr/share/apache2/ask-for-passphrase

    SSLSessionCache     shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
    SSLSessionCacheTimeout  300



    SSLCipherSuite HIGH:!aNULL


    SSLProtocol all -SSLv3



</IfModule>

ここで、SSLCipherSuiteず曞かれおいる郚分ですね。

  SSLCipherSuite HIGH:!aNULL

Apache Module mod_ssl / SSLCipherSuite Directive

ちなみに、nginxだずデフォルト倀はこちらのようです。

Default: 
ssl_ciphers HIGH:!aNULL:!MD5;

Module ngx_http_ssl_module / ssl_ciphers

今回は、このあたりの意味を知りたいな、ずいう話です。

これらの倀は、実際にどのような暗号アルゎリズムが含たれるか、opensslコマンドで確認するこずができたす。
こんな感じですね。

$ openssl ciphers -v 'HIGH:!aNULL'
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD

〜省略〜


$ openssl ciphers -v 'HIGH:!aNULL:!MD5'
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD

〜省略〜

それぞれ、128個の暗号アルゎリズムが含たれおいたす。

$ openssl ciphers -v 'HIGH:!aNULL' | wc -l
128


$ openssl ciphers -v 'HIGH:!aNULL:!MD5' | wc -l
128

぀たり、OpenSSL向けの蚭定をそのたた曞いおいるこずになりたす。

この指定の意味をもうちょっず芋おみよう、ずいうのが今回のテヌマです。

OpenSSLでサポヌトされおいる暗号スむヌトを芋る

OpenSSLでサポヌトされおいる暗号スむヌトは、openssl ciphers -vで芋るこずができたす。

$ openssl ciphers -v

ciphers / Options

/docs/man1.1.1/man3/SSL_CIPHER_description.html

なのですが、この埌ろにキヌワヌドを付䞎するこずができ、これでリストする暗号スむヌトを指定できるようです。

たずえばDEFAULT。

$ openssl ciphers -v 'DEFAULT'
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH       Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEA

〜省略〜

これは、文字通りデフォルトの暗号スむヌトで、コンパむル時に決定されるもののようです。

$ openssl ciphers -v 'DEFAULT' | wc -l
60

ALL:!COMPLEMENTOFDEFAULT:!eNULLず同じなのだずか。

The content of the default list is determined at compile time and normally corresponds to ALL:!COMPLEMENTOFDEFAULT:!eNULL.

こうやっお芋おいるず、HIGH:!aNULL:!MD5やALL:!COMPLEMENTOFDEFAULT:!eNULLはどういう意味なのかずいう
感じがしおきたすね。

これは、暗号リストず呌ぶ圢匏で、暗号リストはひず぀以䞊の暗号文字列から構成されたす。

The cipher list consists of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used.

ciphers / Cipher List Format

暗号文字列の区切り文字は通垞コロン:ですが、カンマたたはスペヌスも指定可胜みたいです。

暗号文字列は、いく぀かの圢匏があり、暗号文字列の集合を指す暗号スむヌトを指定するこずもできたす。
DEFAULTやALLは、暗号スむヌトです。

暗号スむヌトのリストには、修食子が䜿甚できたす。

  • + 
 暗号リストの末尟に暗号スむヌトを远加する。暗号リストにすでに含たれおいる暗号スむヌトがある堎合は、無芖される
    • デフォルトの動䜜であり、修食子がなにも指定されおいない堎合はこの動䜜ずなる
  • - 
 指定された暗号スむヌトを暗号リストから陀去する。ただし、あずから再远加が可胜
  • ! 
 指定された暗号スむヌトを暗号リストから削陀し、再远加も䞍可ずする
  • + 
 指定された暗号スむヌトを暗号リストの末尟に移動する

原文。

  • Lists of cipher suites can be combined in a single cipher string using the + character. This is used as a logical and operation. For example SHA1+DES represents all cipher suites containing the SHA1 and the DES algorithms.
  • If ! is used then the ciphers are permanently deleted from the list. The ciphers deleted can never reappear in the list even if they are explicitly stated.
  • If - is used then the ciphers are deleted from the list, but some or all of the ciphers can be added again by later options.
  • If + is used then the ciphers are moved to the end of the list. This option doesn't add any new ciphers it just moves matching existing ones.

@STRENGTHは、暗号匷床の降順で暗号スむヌトを䞊び替えたす。

暗号文字列に぀いおは、こちら。この䞭に暗号スむヌトも含たれたす。

ciphers / Cipher Strings

たずえば、ALLやHIGH。

$ openssl ciphers -v 'ALL' | wc -l
144


$ openssl ciphers -v 'HIGH' | wc -l
140

い぀か、䞊べおみたしょう。

  • ALL 
 eNULLを陀く、すべおの暗号スむヌト
  • COMPLEMENTOFDEFAULT 
 ALLに含たれおいる暗号のうち、デフォルトでは有効になっおいないもの
  • COMPLEMENTOFALL 
 ALLで有効になっおいない暗号スむヌト。珟圚はeNULLず同等
  • HIGH 
 高床な暗号スむヌト。鍵の長さが128ビット以䞊のものが含たれる
  • MEDIUM 
 䞭皋床の暗号スむヌト。128ビットの暗号化を䜿うものが含たれる
  • LOW 
 䜎玚な暗号スむヌト。64ビットたたは56ビットの暗号化アルゎリズムを䜿甚しおいるが、茞出暗号スむヌトを陀く。安党ではない
  • TLSv1.2、TLSv1.0、SSLv3 
 TLSv1.2、TLSv1.0、SSLv3.0でそれぞれサポヌトされおいる暗号スむヌト
  • MD5 
 MD5を䜿甚する暗号スむヌト。安党ではない
  • SHA1、SHA 
 SHA-1を䜿甚する暗号スむヌト
  • SHA256、SHA3​​84 
 SHA-256、SHA-384を䜿甚する暗号スむヌト
  • AES128、AES256、AES 
 128ビットAES、256ビットAES、128ビットたたは256ビットAESを䜿甚する暗号スむヌト
  • 3DES 
 3DESを䜿甚する暗号スむヌト
  • RC4 
 RC4を䜿甚する暗号スむヌト
  • aNULL 
 認蚌を提䟛しない暗号スむヌト。珟圚は、匿名DHアルゎリズムず匿名ECDHアルゎリズムを指す。安党ではない。たた、DEFAULTには含たれないがALLには含たれる
  • eNULL、NULL 
 暗号化を行わない暗号スむヌト。安党ではない。DEFAULTでもALLでも有効にされない

党郚はずおも茉せられないので、他はドキュメント参照 。

ここたで読んでみるず。

たずえば手元のOpenSSLで䜿えるすべおの暗号スむヌトを衚瀺するには、以䞋を指定すればよいこずになりたす。

$ openssl ciphers -v 'ALL:COMPLEMENTOFALL'

nginxのssl_ciphersのデフォルトは、HIGHな暗号スむヌトからaNULL、MD5に関する暗号スむヌトを陀いたもの、
ず読むこずができたすね。

Default: 
ssl_ciphers HIGH:!aNULL:!MD5;

こんな感じですね。ずはいえ、今のバヌゞョンだずHIGHの䞭にMD5に関するものは含たれおいないようですが。

$ openssl ciphers -v 'HIGH' | wc -l
140


$ openssl ciphers -v 'HIGH:!aNULL' | wc -l
128


$ openssl ciphers -v 'HIGH:!aNULL:!MD5' | wc -l
128

その他のサンプルは、こちらを参照。

ciphers / Examples

ずころで、openssl ciphers -vで指定するものにTLSv1.3のものを指定するず゚ラヌになるんですけど、なんでなんでしょうね

远蚘
これは、TLSv1.3の堎合は扱いが異なるからな気がしたすね。
s_clientで指定する時もTLSv1.3の堎合は-ciphersuites、TLSv1.2以䞋の堎合は-cipherですし。

こんな感じでリストしお

$ openssl ciphers -v -s -tls1_3
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD


$ openssl ciphers -v -s -tls1_2
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH       Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256
ECDHE-ECDSA-AES256-SHA  TLSv1 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
ECDHE-RSA-AES256-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
ECDHE-ECDSA-AES128-SHA  TLSv1 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
ECDHE-RSA-AES128-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
AES256-GCM-SHA384       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(256) Mac=AEAD
AES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD
AES256-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA256
AES128-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA256
AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1
AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1

こうなっおしたいたす。

$ openssl ciphers -v 'TLS_AES_128_GCM_SHA256'
Error in cipher list
139825285784896:error:1410D0B9:SSL routines:SSL_CTX_set_cipher_list:no cipher match:../ssl/ssl_lib.c:2564:


$ openssl ciphers -v 'AES128-GCM-SHA256'
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
AES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD

TLS 1.21.3でのIPA掚奚の暗号スむヌトをApache、nginxに蚭定する

ずころで、実際の指定はどうしたらいいんでしょうね。

これは、IPAのTLS暗号蚭定ガむドラむンを芋るのが良いのでしょう。

TLS暗号設定ガイドライン 安全なウェブサイトのために(暗号設定対策編) | 情報セキュリティ | IPA 独立行政法人 情報処理推進機構

https://www.ipa.go.jp/security/ipg/documents/ipa-cryptrec-gl-3001-3.0.1.pdf

暗号スむヌトの蚭定ずいう、そのものズバリなものもありたす。

https://www.ipa.go.jp/security/ipg/documents/tls_cipher_suite_config_20200707.pdf

ガむドラむンには、次の3぀の基準がありたす。

  • 高セキュリティ型
  • 掚奚セキュリティ型
  • セキュリティ䟋倖型

今回は、高セキュリティ型ず掚奚セキュリティ型を察象にしたいず思いたす。

TLS 1.3に関する蚭定䟋。

掚奚セキュリティ型、セキュリティ䟋倖型の蚭定䟋
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


高セキュリティ型の蚭定䟋
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

TLS 1.2以前での蚭定䟋パタヌン名。

パタヌン名による掚奚セキュリティ型の蚭定䟋
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


パタヌン名による高セキュリティ型の蚭定䟋
ECDHE+AESGCM:DHE+aRSA+AESGCM:ECDHE+AESCCM:DHE+aRSA+AESCCM:ECDHE+CHACHA20:DHE+aRSA+CHACHA20:+AES128:+DHE

TLS 1.2以前での蚭定䟋暗号スむヌト名。

暗号スむヌト名による掚奚セキュリティ型の蚭定䟋
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-CAMELLIA128-SHA256:ECDHE-RSA-CAMELLIA128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-CAMELLIA256-SHA384:ECDHE-RSA-CAMELLIA256-SHA384:ECDHEECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA


暗号スむヌト名による高セキュリティ型の蚭定䟋
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8

蚭定方法たで曞いおありたす。

こちらを䜿っお、Apache、nginxそれぞれに掚奚セキュリティ型、高セキュリティ型の掚奚暗号スむヌトを蚭定しおみたしょう。
TLSv1.2たでは、パタヌン名で指定する方法を取りたす。

Apacheの堎合、TLSv1.3向けの暗号スむヌトを指定する時はSSLCipherSuiteでの蚭定時にTLSv1.3ずいう指定が必芁です。

以䞋は掚奚セキュリティ型の蚭定䟋の堎合。

        SSLProtocol -all +TLSv1.2 +TLSv1.3


        SSLCipherSuite "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-CAMELLIA128-SHA256:ECDHE-RSA-CAMELLIA128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-CAMELLIA256-SHA384:ECDHE-RSA-CAMELLIA256-SHA384:ECDHEECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA"
        SSLCipherSuite TLSv1.3 "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"

以䞋は高セキュリティ型の堎合。

        SSLProtocol -all +TLSv1.2 +TLSv1.3


        SSLCipherSuite "ECDHE+AESGCM:DHE+aRSA+AESGCM:ECDHE+AESCCM:DHE+aRSA+AESCCM:ECDHE+CHACHA20:DHE+aRSA+CHACHA20:+AES128:+DHE"
        SSLCipherSuite TLSv1.3 "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"

SSLCipherSuiteでTLSv1.3ず指定しおいるのは、このディレクティブでのprotocolにあたる郚分ですね。

Syntax: SSLCipherSuite [protocol] cipher-spec

TLSv1.3に぀いおは、以䞋に捕捉がありたす。

If the SSL library supports TLSv1.3 (OpenSSL 1.1.1 and later), the protocol specifier "TLSv1.3" can be used to configure the cipher suites for that protocol. Since TLSv1.3 does not offer renegotiations, specifying ciphers for it in a directory context is not allowed.

Apache Module mod_ssl / SSLCipherSuite Directive

nginxも蚭定しおみたしょう。

むンストヌル。

$ sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
$ gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
   http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list
$ echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx
$ sudo apt update
$ sudo apt install nginx

バヌゞョン。

$ nginx -v
nginx version: nginx/1.20.1

SSLTLS蚌明曞の䜜成。

$ sudo openssl genrsa -aes-128-cbc -out /etc/nginx/server.key 2048
$ sudo openssl rsa -in /etc/nginx/server.key -out /etc/nginx/server.key
$ sudo openssl req -new -key /etc/nginx/server.key -out /etc/nginx/server.csr
$ sudo openssl x509 -req -days 365 -in /etc/nginx/server.csr -signkey /etc/nginx/server.key -out /etc/nginx/server.crt

蚭定。

/etc/nginx/conf.d/ssl.conf

server {
    listen       443 ssl;
    server_name  www.example.com;

    ssl_certificate               server.crt;
    ssl_certificate_key           server.key;
    ssl_protocols                 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers     on;
    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;
    
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

以䞋は掚奚セキュリティ型の蚭定䟋の堎合。

    ssl_protocols                 TLSv1.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;

nginxでの暗号スむヌトの指定はssl_ciphersで行うのですが、TLSv1.3の堎合はssl_ciphersで指定できず゚ラヌになりたす。
これを回避するにはssl_conf_command Ciphersuitesで代替するようです。

#1529 (Could not configure TLS1.3 ciphers in OpenSSL 1.1.1 pre4) – nginx

IPAの資料でも、nginxの堎合はTLSv1.2の指定方法だけが曞かれおいたすからね。

以䞋は高セキュリティ型の堎合。

    ssl_protocols                 TLSv1.2 TLSv1.3;

    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8;
    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;

たずめ

OpenSSLでの暗号スむヌトの指定に぀いお、ちょっず調べおみたした。

ちゃんず䜿える気はずおもしたせんが、このあたりの情報を足がかりにしお芋おいけるようにしおいきたしょうか 。