そもそもTLSにおいて再ネゴシエーション (Renegotiation) とは
既存のセキュア・セッション中に新しいハンドシェーク・ネゴシエーションを開始することを、再ネゴシエーションといいます。
参考サイトより
再ネゴシエーションの脆弱性
まず書いておかないといけない背景的なところから書きます。TLS v.1、SSL v.3では脆弱性が見つかり、2010年頃に更新されたTLS/SSLプロトコルがリリースされました。具体的には、TLS/SSL 再ネゴシエーションによる中間者 (MITM) 攻撃 (CVE-2009-3555)が実行可能でした。サーバ証明書とクライアント証明書を利用した相互の証明書ベースのクライアント認証接続であっても、再ネゴシエーションによる中間者攻撃を防ぎきれません。
当該メッセージが出たコマンド
openssl s_client
で自己署名証明書でのTLS/SSL接続をテストした時に “Secure Renegotiation IS NOT supported
” というメッセージが表示されることがあります。
openssl s_client -connect localhost:443 -cipher ECDHE-RSA-AES128-GCM-SHA256 < /dev/null
CONNECTED(00000003)
......
..........
---
SSL handshake has read 1378 bytes and written 315 bytes
Verification error: self-signed certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 18 (self-signed certificate)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: 06F79634BC3689E......
......
......
..........
DONE
以下の各サイトを参考にすると、上述の再ネゴシエーションによる攻撃の脆弱性は、0.9.8以降のOpenSSLバージョンで修正されていると思われます。
下記コマンドで確認したところ、私が使用しているOpenSSLのバージョンは3.0.8
(かつhttpdやvsftpdとともにTLSv1.3を使用してTLS/SSLしている)となっているので、あたりまえですが「Secure Renegotiation IS NOT supported
」というのは、『 (現在ユーザが使用している) OpenSSLが安全な再ネゴシエーションを実装していない』というわけではなく、OpenSSLを利用しているサービス提供者側 (今回は個人的な利用ですが)が、サーバーやクライアントに対して設定をおこなううえで、安全な再ネゴシエーションが実施されるようになっていない、という意味だと思われます。
/usr/bin/openssl version -a
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
対処法
筆者の以下の投稿で、暗号化スイートの優先設定を適切に行うことによりSecure Renegotiation IS supported
にすることができます。