LoginSignup
8
2

More than 3 years have passed since last update.

Ubuntu 20.04でSSL接続エラー(ssl.SSLError: [SSL: DH_KEY_TOO_SMALL])が発生する際の対処法

Last updated at Posted at 2020-11-16

Ubuntu 20.04でPythonのサードパーティAPIを用いてSSL通信しようとしたところ以下のエラーが発生。Ubuntu 20.04で起こるらしい。

(Caused by SSLError(SSLError(1, '[SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1123)')

下記のQAを参考に解決した方法をまとめます。
https://askubuntu.com/questions/1233186/ubuntu-20-04-how-to-set-lower-ssl-security-level

このエラーが発生する背景

Debine系のOpenSSLのデフォルト設定がよりセキュアになったことが原因らしい。
セキュアになった背景はこれです。(英文です)
https://weakdh.org/

簡単に概要を訳すとSSLで使用する鍵交換のアルゴリズムに脆弱性が見つかったため。
脆弱性に該当するSSL通信をしようとするとDH_KEY_TOO_SMALLのエラーが発生する。

根本解決としてはサーバー側のセキュリティが改善されることだが、今回はサードパーティAPIを用いており不可能。
そのため暫定対処ではあるが、セキュリティレベルを変更する方法を採用した。

openssl.cnfの編集してセキュリティレベルを変更

以下コマンドでopensslコンフィグファイルの配置ディレクトリを確認。

% openssl version -d

ちなみに一般的には"/usr/lib/ssl"配下にある。

ファイル冒頭に以下の1行を追記して保存。

openssl_conf = default_conf

次にファイル末尾に以下を追記する。

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=1

これは何をしているかというとOpenSSLの暗号化のセキュリティレベルを下げている。
これだけでSSL通信できるようになるはず。

openssl.cnfのローカル化

/usr/lib/ssl配下のコンフィグファイルを直接編集するとLinuxシステム全体に影響を与える。
影響を特定ユーザーでのログイン時等に局所化したい場合は以下を環境変数を.bashrcに追記する。

export OPENSSL_CONF=/path/to/my/openssl.cnf

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2