rcmdnk's blog

プロフェッショナルSSL/TLS

メールの取扱として、基本的にすべてのメールをGmailに転送して、 返信する際もGmailから返信、という形にしているのですが、 その中でSMTPサーバーを使えるアドレスに関して、 今月に入ったくらいからエラーが出て使えなくなっていたのですが、 それを直したのでメモ。

GmailのSMTPサーバー設定

Gmailではそのアカウントのメールアドレス以外のメールも管理できるような 設定があります。

読むだけなら元の方から転送すればよいだけですが、 Gmailから返信したいときはアドレスを追加してそのアドレスを選んで返信します。

もし、そのアドレスがそれ程重要なものでなければ GmailのSMTPサーバーを使って”偽装”して送ることも出来ます。

ただ、そういったものを弾くものもあるので、 きちんとしたアドレスに関してはそのアドレス扱うメールサービスが提供している SMTPサーバーを登録してそこ経由で送る様にします。

それで正しくそのアドレスから返信することが出来るようになります。

TLS Negotiation failed, the certificate doesn’t match the host.

そうやって登録してあったあるアドレスに関して、突如

メールの配信エラー

[名前] の機能を使用して、別のアドレスまたは別のエイリアスからこのメールを送信しようとしています。[名前] のアカウントの設定に誤りがあるか、設定が最新の状態ではありません。設定を確認して、もう一度送信してみてください。

詳細

応答:

TLS Negotiation failed, the certificate doesn’t match the host.

といったエラーを出して届かなくなってしまいました。

試しに設定を見返してみようと登録してあるアドレスの設定を開いて進めていくと、 SMTPサーバーの設定の所で、以前のままの状態で改めてパスワードを入れて登録しようとすると

認証が失敗しました。ユーザー名とパスワードを確認してください。

と出て失敗する様になっていました。

サーバー側に関して、パスワードなどは変更してません。(後で確認済。)

ちょっと困ったな、と思ってたんですが、 ちょうどこの時期から在宅ワークなどが始まっていて、 このサーバーとかも、もしかしたらFirewallとかいじっておかしくなったのかな、とか思ってました。

実際、問題が他の人にも出ればすぐに対処されるだろうし、 色々大変だろうから無理に言わずに様子見、とか思って放置してました。

そのアドレスを使う範囲でも、普段は別のアドレスを使うことのが多かったりもしたので。

ただ、一向に治る気配もないのでちょっと調べてみることに。

Gmail側の変更が原因だった模様

ちょっと調べればすぐに出てくるのですが、 同じような人は自分と同じSMTPサーバーを使っている人、というわけではなく、 Gmailそのものを使ってる人に居ました。

my message can sometimes not be delivered because of an incorrect alias. Sometimes it works. - Gmail Community

メールが突然配信エラーになる - Gmail Community

上の中を見ているとちょっと間違った(というより正確でない)情報も多いので注意した方が良いですが、 結論としてはGoogleがセキュリティアップデートを行って SMTPサーバーに設定する名前がそのサーバーの証明書にあるものと一致していないと駄目、 とする様になった様です。

今までは複数のホスト名が同一IP に付けられている場合、 どれを使っても最終的に証明書にあるホスト名のものと一緒であればOKでした。

それがちゃんと証明書にある名前を使わないと駄目、となった、ということ。

通常のGmail的なところでのお知らせなどは来てないと思いますが、 G Suite向けにはそれっぽいことが書いてあります。

G Suite Updates Blog: Improve email security in Gmail with TLS by default and other new features

実際に起っていたこと

私の設定では

smtp.example.com

という感じでsmtpという名前でSMTPサーバーを設定していました。 まあ、この名前があるのでこれを通常SMTPサーバーとして登録します。

ただ、実際にはこのサーバーには他にも名前があって、

mail.example.com

といった感じの(実際にはmailじゃないんですが) メールサーバー用の名前(POP3やIMAP使うときにはそれを使う感じにしてるもの) が証明書に登録してあるものでした。

なのでここで弾かれていた、と。

実際、証明書にあるmail.example.comの方を登録するとちゃんとパスワードも通り、 メールも送れる様になりました。

正しいホスト名の調べ方

上の様にいくつか名前があるのを知っていれば適当に入れてれば当たるかもしれませんが、 ぱっとわからないこともあるかと思います。

そういった時に、正しいホスト名 1 を確認する方法として、 もし同じSMTPサーバーを使っている人が他に居てその人から過去にメールが来ているならば、 Gmailから確認できます。 ただし、そのメールが外部の別のSMTPサーバーを使ってない、ということは確認しないといけません。 (外部のものであればすぐわかるでしょうし、そういった場合は何人もいると思うので 何人か分で確認すれば間違いかと。)

Gmailでその人のメールを開き、 右上の三点マーク()からメッセージのソースを表示を選んでReceived: で始まる部分を見てみます。

そうすると

Received: from mail.example.com (server.example.com. [xxx.xxx.xxx.xxx])

みたいな部分が見つかるはずです。このfromの後にあるものが正しいもの。

その後ろはまた別の名前だったりするかもしれませんが、server.example.comも これも同じIPアドレスについているホスト名です。(IPアドレスから通常逆引きして出てくるもの)

もし、この確認が難しい場合、Linuxとかが使えるならターミナルで

$ openssl s_client -starttls smtp -showcerts -connect smtp.example.com:587 </dev/null 2>/dev/null|grep -A1 "Server certificate"
Server certificate
subject=C = JP, ST = Tokyo, O = My Organization, OU = My Unit, CN = mail.example.com

のようにするとそのIPアドレスのSMTP (587ポート)サーバーとして登録されている 名前がCN(Common Name)で確認出来ます。

この辺でもどうしても上手く行かない場合は 一度サーバーを管理している人や会社に聞いてみた方が早いです。

オレオレ証明書でやっている場合には対処出来ないかもしれないので きちんとした証明書を入れてもらうしかないかもしれません。

Sponsored Links
  1. HELOというコマンドを使ってドメイン名を確認するため、 HELOドメイン、と呼ばれるとか。

    とことんわかるインターネット基礎の基礎14 ページ3

Sponsored Links

« GitHub Actions用のアクションを自作する Withingsのスマート睡眠パッド:Withings Sleepを使い始めた »