Linux の fetchmail で OCN のメールサーバ(pop.ocn.ne.jp)からメールを取得していましたが、 2023/07/06 から時々 fetchmail が次のエラーを出力し接続できないように。
System error during SSL_connect(): handshake failed at protocol or connection level.
発生頻度は徐々に増え 2023/07/26 からはまったく接続できなくなりました。 openssl コマンドで接続するとこんなエラーが出ます。
% openssl s_client -connect pop.ocn.ne.jp:995
(略)
140001415091392:error:1414D172:SSL routines:tls12_check_peer_sigalg:wrong signature type:../ssl/t1_lib.c:1146:
(略)
この問題の検証をしてた頃は上記の方法で TLS1.1 や TLS1.0 でも接続できたのですが、今現在は TLS1.1 や TLS1.0 では接続できません。 検索するとこんな案内が出てました。
OCNメール セキュリティ強化(TLS1.0/1.1サポート終了)のお知らせ
2023年7月3日以降、「TLS1.0」「TLS1.1」による接続のサポートを順次終了いたします。
とあり時期は一致します。 また pop.ocn.ne.jp の IPアドレスは現時点で 8個あり、これらが「順次」設定変更されたなら設定変更後のサーバを引き当てるとエラーになるという現象とも一致します。 よってこの施策が原因でしょう。
OpenSSL の設定でセキュリティレベルを下げると接続できる事例が紹介されてたので検証。
OpenSSL の設定ファイルをコピーする。(コピー先のファイル名はお好みでどうぞ)
cp /etc/ssl/openssl.cnf ~/.ocn-mail-openssl.cnf
末尾の CipherString の設定を変更する。
CipherString = DEFAULT@SECLEVEL=2
↓
CipherString = DEFAULT@SECLEVEL=1
この設定ファイルを環境変数 OPENSSL_CONF 経由で openssl コマンドに渡す。
env OPENSSL_CONF=~/.ocn-mail-openssl.cnf openssl s_client -connect pop.ocn.ne.jp:995
これで正常に接続できることは確認できました。
ただ、TLS1.1 や TLS1.0 を廃止するという OCN の施策自体は納得できるのですが、 OpenSSL のセキュリティレベルを下げないと通信できないのは正直どうかと思います。
検証したセキュリティレベルの変更を fetchmail だけに適用するため、こう実行します。
env OPENSSL_CONF=~/.ocn-mail-openssl.cnf fetchmail pop.ocn.ne.jp
これで動作するという情報もありましたが、残念ながら当方の環境ではコンフィグファイルが適用されず正常動作しませんでした。
fetchmail の plugin キーワードで接続用プログラムを指定できるので、 openssl コマンドで接続するよう .fetchmailrc を設定します。
poll pop.ocn.ne.jp
plugin "env OPENSSL_CONF=~/.ocn-mail-openssl.cnf openssl s_client -quiet -connect pop.ocn.ne.jp:995"
username アカウント名
password パスワード
sslproto ""
これでうまく接続できました。 また結果としてセキュリティレベルの変更は OCN への接続だけに適用できました。
なお sslproto ""
キーワードですが、これを指定しないと
openssl での接続上でさらに TLS
にアップグレードしようとして次のエラーが出てしまいます。
fetchmail: pop.ocn.ne.jp: upgrade to TLS failed.
(fetchmail: pop.ocn.ne.jp: TLS へのアップグレードに失敗。)
(以上)