恐ろしや……TLS Negotiation failed, the certificate doesn’t match the host., code: 0

ここのところ、Gmailからメールを送信しようとすると、

TLS Negotiation failed, the certificate doesn't match the host., code: 0

なるエラーで送信が出来なくなりました。

なんじゃこりゃ。と思いググっていると、昨年からGmail側のセキュリティが代わり、SSL証明書のコモンネームとSMTPサーバが不一致の場合に発生するとかしないとか。。

対応したこと(一旦はうまく行ったんです。。。)

もしや……と思い、以下でサクッと取得したSSL証明書を利用していたので、

取得時に利用した monmon.jp と www.monmon.jpの同時取得(SAN)の弊害で、コモンネームがwww.monmon.jpになってるんじゃ……と思い、SMTPサーバをwww.monmon.jpに変更したところ解消しました。

次にやってみたこと……

ここでやめておけばよかったものの……

じゃ、www.monmon.jpは使ってないので、この機会に証明書を取り直しておこう、と monmon.jp だけで証明書を取得しなおしたのです。

すると再び、TLS Negotiation failed が発生。。

openssl s_client -connect monmon.jp:587 -starttls smtp

で、587ポートに利用されている証明書を確認するも、

CN = monmon.jp

と、問題なさそう。

証明書ファイルも

openssl x509 -in /etc/letsencrypt/live/monmon.jp/cert.pem -text

確認してみたところ、

CN = monmon.jp

と、意図したものになってる。

が、エラーは解消されず。

465番ポートでTLSを使わずにSSLで送ると解消されるケースも。とあったので試してみたのですが撃沈。

しかたがないので……暫定対応

にっちもさっちもいかないので、ひとまず25番ポートにて送信を。。。非セキュア通信なのでキモチワルイのですが、暫定的に。

ド趣味の検証サーバなので大事には至らないのですが、もし仕事としての案件の場合は対策考えないとなぁ。

こちら側でログが見えないのが、マヂ辛い。。

改めてポートを確認したところ……

openssl s_client -connect monmon.jp:587 -starttls smtp

あれ?

    00d0 - 19 4f 60 51 88 a3 47 a3-9d 9a 44 1b b3 5c 2e 7b   .O`Q..G...D..\.{

    Start Time: 1644230895
    Timeout   : 7200 (sec)
    Verify return code: 10 (certificate has expired)
    Extended master secret: no
    Max Early Data: 0

なぜか期限切れエラーが出てる。

うーん、証明書のパスなんかを一通り調査するもなんら問題無し。

ハマること数時間……不思議なファイルを見つけました。

以下で作った、SNI運用証明書のマップファイル tls_server_sni_maps.db これのサイズが妙にデカイ。

もしかして、マッピングをベースに証明書をアーカイブしているんじゃ……

試しに、再構築してみました。

sudo postmap -F /etc/postfix/tls_server_sni_maps

すると。

openssl s_client -connect monmon.jp:587 -starttls smtp

.....

    00d0 - 19 fd 19 1e d8 ba d1 7a-b3 5e f0 b8 19 75 4b be   .......z.^...uK.

    Start Time: 1644231440
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0

エラーが消えた。

まさか……

Gmailのアカウント設定を行ってみたら、TLS Negotiation failed, the certificate doesn’t match the host., code: 0 エラーが解消されて通常稼働しました(涙

原因は

・証明書のコモンネームを明確にしSMTPサーバと一致させる事

・あとは、証明書の更新にあわせてpostfixだけではなく、tls_server_sni_maps.db も再構築する

ことが必要みたいですね。

証明書の更新タイミングでの、tls_server_sni_maps.db の更新についてはこちらにまとめておきます。