STARTTLS通信において送信先が受け入れず届かない。原因はクライアント証明書と言われた・・・ new!

E-Post V シリーズ(配送プログラムのepstddサービス)から、相手SMTPへのメール送信時時にSTARTTLSを使ったSTARTTLS通信において、送信したメールが送信先が受け入れず届かないという場合、何より先に senderlog を調べる必要があります。E-Post側では送信完了しているのか、それとも相手が拒絶した理由と500番台か400番台のエラーコードが記録されていることはないか、あるいは、通信切断がどこかで発生しているかとか、そうでないかといった確認も必要です。もし通信切断があった場合は、拒絶した理由とエラーコードがまったく出ないケースもあれば、socket errorなどのエラーが出ているケースなどがあります。

仮に、senderlog上の記録で正常に送信が完了し、相手に届け終わっているようであれば、相手SMTPが複数あり、複数の経路のうちの一つで起きているのかどうかといったことも確認することが必要なケースもあります。

このユーザー様からの問い合わせ案件では、先方からクライアント証明書を設定すべきだという指摘がされましたが、E-Post V シリーズ(配送プログラムのepstddサービス)から、相手SMTPへのメール送信時時にSTARTTLSを使った通信をする際に、E-Post側の証明書は不要で、先方の指摘は間違いです。なぜなら、この時のSTARTTLSでのネゴシェーションは、相手SMTP側で保持しているものが利用されるからです。

また、相手側SMTPが対応しているSTARTTLSでの暗号化TLSバージョンはどのバージョンであるか、暗号化のTLSバージョンを確認しておく必要があります。
考えられるバージョンとしては、SSL3.0/TLS1.0/TLS1.1/TLS1.2/TLS1.3 ですが、最近ではセキュリティの観点から、SSL3.0は既に無効化されており、できればTLS1.3であることが望ましいこととされている状況です。
相手側SMTPのデフォルトの対応バージョンがどれかは、openssl コマンドを使って、STARTTLSでの SMTP接続を確認してみることが可能です。FreeBSDには openssl がデフォルトでインストールされています。SSL/TLS通信での可否は、コマンドラインから openssl にオプションを付けることにより確認可能です。

[SMTP側がデフォルトでの暗号化TLSバージョンでの通信する場合]
openssl s_client -connect [接続先smtp]:[25 or 587] -starttls smtp

[暗号化TLSバージョンを指定する場合]
openssl s_client -connect [接続先smtp]:[25 or 587] -starttls smtp -ssl3
openssl s_client -connect [接続先smtp]:[25 or 587] -starttls smtp -tls1
openssl s_client -connect [接続先smtp]:[25 or 587] -starttls smtp -tls1_1
openssl s_client -connect [接続先smtp]:[25 or 587] -starttls smtp -tls1_2
openssl s_client -connect [接続先smtp]:[25 or 587] -starttls smtp -tls1_3

opensslコマンドを使って接続を確認する方法は下記記事も参考にしてください。こちらは構築した自サーバで確認している事例ですが、同様のコマンド確認は外部サーバに対しても使えます。
(関連FAQ)
SSL/TLS証明書適用後の通信をコマンドで確認する方法

次はTLSバージョンを指定してTLS通信疎通を自サーバで確認する事例です。STARTTLS通信時にもTLSバージョン指定が同様にできます。
(関連FAQ)
opensslコマンドでTLSバージョンを指定して疎通確認する方法について