OpenSMTPD TLS Ciphers 設定
コンテンツ
OpenBSD を 6.8 から 6.9 にアップグレード後 smptd
でメール送信できなくなった際のデバグメモ。
原因はTLSのデフォルト設定が変更になったため。相手側の SMTP サーバと設定をあわせることでメールが送信できる状態に回復した。
エラーログ
ログファイル /var/log/maillog
に次のような handshake 失敗が記録される。ユーザ認証前の接続に失敗する。これは TLS の handshake に失敗している。
|
|
原因はサーバ、クライアントがTLS で使用する ciphers の不一致。これが一致するように smptd を設定すればよい。
smptd.conf 該当箇所
設定ファイル smtpd.conf(5) の action を指定するところ。
|
|
ここに次のように TLS で使用する ciphers を指定する。これで TLS の handshake が完了しメールが送信できるようになった。
|
|
なお、指定可能な値は tls_config_set_ciphers(3) に記載がある。例えば次が指定可能(これ以外にも SSL_CTX_set_cipher_list(3) の形式で指定できる)。
- secure (default)
- compat
- legacy
- insecure
他のサーバからの SMTP をリッスンしており、そこでも cipher を標準から変更する場合は listen
で ciphers を指定する。
TLS cipher について
設定値 secure, compat, legacy, insecure で具体的に使用可能になる ciphers は man page には明示されていない。しかし、対応する ciphers の format がソースコードに記載してある。
|
|
標準では TLS 1.3 もしくは TLS 1.2 のうち前方秘匿性(ECDHEかDHE)かつAEAD(暗号化と認証を同時に実行する)のみが許可されていることが分かる。
このキーワードを openssl ciphers
のコマンドで指定することで具体的な ciphers の リストを得られる。たとえば comapt に対応する ciphers は次のように確認できる。
|
|
SMTPサーバが使用する cipher の確認
コマンド openssl
を使い実際に接続することで使用する cipher を確認できる。
|
|
この例では AES128-GCM-SHA256
が使用されている。これは鍵交換に RSA を利用しており前方秘匿性がないためデフォルト設定だと接続できなかった。
環境
- OpenBSD 6.9
- OpenSMTPD 6.9.0
- LibreSSL 3.3.2
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)