POPFile で SSL 接続しようとすると dh key too small エラーが発生

利用しているメールサーバーのひとつ (以下の例では pop3.nanashinonozomi.com と表記) に POPFile で SSL 接続しようとすると、

+OK POP3 POPFile (v1.1.3) server ready
USER pop3.nanashinonozomi.com:f7u:ssl
-ERR can't connect to pop3.nanashinonozomi.com:995
QUIT
+OK goodbye

のエラーでメールサーバーへのアクセスが失敗することに気付いた。

POPFile のログファイルを確認すると、

IO::Socket::INET or IO::Socket::SSL gets an error: SSL connect attempt failed error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small

のエラーで SSL 接続の確立に失敗していたため、

$ openssl s_client -connect pop3.nanashinonozomi.com:995

として状況を確認したところ、同様のエラーが発生。

$ openssl s_client -cipher 'DEFAULT:!DH' -connect pop3.nanashinonozomi.com:995

と、 DH を除外すると接続に成功することから、これ相当の設定が必要になるのだが……さて、どうしたものか…………。

原因

OpenSSL 1.1.1 からセキュリティーレベルが引き上げられ、 RSA, DSA, DH 鍵の鍵長のデフォルトが 2,048bit に変更されたことが影響している模様。

$ openssl version
OpenSSL 1.1.1f  31 Mar 2020

確かに該当している……。

対処方法

良い方法とは思えないが、 POPFile の起動時のみ OpenSSL の SECLEVEL を 1 に下げるという強攻策をとることにした。

参考にしたのは「Ubuntu 20.04 – how to set lower SSL security level? – Ask Ubuntu」のスレッド。

OpenSSL の設定ファイル openssl.cnf をホームディレクトリー以下にコピー

$ openssl version -d
OPENSSLDIR: "/usr/lib/ssl"
$ cp /usr/lib/ssl/openssl.cnf ~/etc/openssl.cnf

コピーした設定ファイル ~/etc/openssl.cnf に設定を追記

コピーした設定ファイル ~/etc/ openssl.cnf の1行目に下記の1行を追記する。

openssl_conf = openssl_init

同様にファイルの最後に下記の8行を追記する。

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
CipherString = DEFAULT@SECLEVEL=1

POPFile を起動するシェルスクリプトを修正

現在利用中の POPFile 起動用シェルスクリプト ~/bin/start_popfile.sh の内容を修正する。

内容としては、

#!/bin/sh

### 追記 ここから
# 読み込む openssl.cnf の場所
export OPENSSL_CONF=/home/f7u/etc/openssl.cnf
### 追記 ここまで

# POPFile がインストールされている場所
export POPFILE_ROOT=/usr/share/popfile/

# ユーザー用のコーパス等が保存されている場所
export POPFILE_USER=/home/f7u/.popfile/

exec /usr/share/popfile/popfile.pl &

上記の例におけるユーザー名 (f7u) は、環境に応じて読み替えが必要。

ひとまず、これで件のエラーを抑制することはできたが、良い方法とは思えない。他にもっと良い方法があるような気がする。

タイトルとURLをコピーしました