Help us understand the problem. What is going on with this article?

Debian系のLinuxでcurl実行時に「curl: (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small」というエラーが発生した時の対処方法

ある日

古くから稼働しているサーバーに対して、DebianベースのDockerコンテナからcurlを実行したら、以下のエラーに遭遇しました。

sh
curl https://example.com/foo/bar
実行結果
curl: (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small

SSL/TLSの暗号化で使われている鍵長が短く、セキュリティの面で引っかかっているようです。

どうすれば、、、

ネットを調べたところ、opensslのバージョン1.1.1からセキュリティが強化され、暗号化の際に用いる鍵長がデフォルトで2048ビットになっており、その影響を受けているようでした。

Change the default RSA, DSA and DH size to 2048 bit instead of 1024

curlのバージョンを調べてみましょう。

sh
openssl version
#=> OpenSSL 1.1.1d  10 Sep 2019

バージョンは1.1.1。ドンピシャですね。

対処方法

サーバー側のopensslをアップデートすることで、この問題は回避できそうですが、サーバー側の管理者権限がないので今回はクライアント側で調整することにします。

Debian系Linuxでopensslの設定を変更する方法を探します。するとGoogle先生のお力で以下のページが見つかりました。

このページ内で以下の記述を見つけました。

I would close that if I were the curl maintainer. The remote site in the
example uses a small DH key [0]. If you can't get owner to upgrade the
site and want still to access the site I suggest to remove
CipherString = DEFAULT@SECLEVEL=2
from /etc/ssl/openssl.cnf.

/etc/ssl/openssl.cnfCipherString = DEFAULT@SECLEVEL=2 の記述を取り除くと良さそうです。該当の行をコメントアウト対応してみます。

/etc/ssl/openssl.cnf
-   CipherString = DEFAULT@SECLEVEL=2
+   # CipherString = DEFAULT@SECLEVEL=2

sed を使ってコマンドで書き換える時はこちら。

# コメントアウト対応、以下を実行するとファイルを即上書きするので要注意(-iオプション)
sed -i -e 's/CipherString = DEFAULT@SECLEVEL=2/# CipherString = DEFAULT@SECLEVEL=2/g' /etc/ssl/openssl.cnf

/etc/ssl/openssl.cnf を書き換えたら、再度curlを実行します。

sh
curl https://example.com/foo/bar
実行結果
{"message":"Hello, World!"}

無事レスポンスが得られました!

注意事項

こちらの対処方法はopensslのクライアント側のセキュリティレベルを下げることになるため、セキュリティリスクがあります。セキュリティ面を考慮して /etc/ssl/openssl.cnf 設定を変更してください。
設定内容についていまいちピンとこない場合は、この対応方法を取らずに、詳しい方に相談するのをおすすめします。

notakaos
東京在住のWeb Developer
yumemi
みんなが知ってるあのサービス、実はゆめみが作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用。Swift, Kotlin, PHP, Vue.js, React.js, Node.js, AWS等エンジニア・クリエイターの会社です。東京(三軒茶屋)/京都(四条烏丸)/札幌/大阪/福岡に展開中!Twitterで情報配信中https://twitter.com/yumemiinc
http://www.yumemi.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした