概要
openssl1.1.1
から、opensslの設定が変わり、デフォルトのセキュリティレベルが2
になった。
通信の際に使用する鍵の長さが想定より短い場合、dh key too small
というエラーが発生し、通信が失敗してしまう。
This is caused by the SECLEVEL 2 setting the security level to 112 bit. This means that RSA and DHE keys need to be at least 2048 bit long.
設定を見てみる
find / -name openssl.cnf
[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2
このDEFAULT@SECLEVEL
はopenssl1.1.0
では1
だったが、2になっている。
解決方法
-
DEFAULT@SECLEVEL
を1に下げる- opensslの設定ファイルで
DEFAULT@SECLEVEL=2
をDEFAULT@SECLEVEL=1
にする- これはアプリケーションのすべての通信に影響するのでできれば避けたい
- プログラムレベルで通信時のセキュリティレベルの設定を変える
- 言語により通信時の設定ができる機能があると思うのでそれを利用
- PHPならcurl_setoptとか
- 言語により通信時の設定ができる機能があると思うのでそれを利用
- opensslの設定ファイルで
- 鍵の再設定をする
- (試していませんが)通信先の設定もいじらないといけない場合があるため、難しいかも。可能であればこちらが理想
※ セキュリティの設定なので詳しい方と相談する。
さいごに
ライブラリのパッチバージョンが1
違うだけでもこういった現象が起きうることが分かりました。
念頭においておきたいと思います。
参考
https://www.google.com/url?q=https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1&sa=D&source=editors&ust=1702441550562129&usg=AOvVaw303sCdJtutwRxHltstCllb
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907788#21
https://www.openssl.org/policies/releasestrat.html
補遺
opensslは1.1.1もサポートを終了している。
https://www.openssl.org/policies/releasestrat.html
Versions 1.1.1 and 1.0.2 are no longer supported.
サポートが終了しているバージョンを使用している場合は(可能なら)openssl3系に速やかに移行するべき。