技術解説 · 出典付きの回答

STARTTLSとは?日和見的TLSによる安全なSMTP通信

STARTTLSは、安全でない接続をTLSで安全な接続にアップグレードできるようにするSMTPサービス拡張です。クライアントとサーバーが1つのポート上で安全なチャネルをネゴシエートできるようにし、転送中のメールの内容と認証情報を暗号化します。

仕組み

プロセスは、通常の平文によるSMTPハンドシェイクから始まります。サーバーはEHLOの応答でSTARTTLSに対応していることを通知します。クライアントは次にSTARTTLSコマンドを発行します。サーバーが受け付けると、双方がTLSハンドシェイクを行って暗号化を確立します。安全なレイヤーが有効になった後も、セッションは通常のSMTPコマンドで続行されますが、以降のデータはすべて暗号化されます。

送信者にとっての重要性

STARTTLSは、メールサーバー間の通信経路を暗号化することで、盗聴や中間者攻撃を防ぎます。STARTTLSがないとSMTPのトラフィックは平文で流れ、ネットワーク経路を監視している誰にでも、機密性の高いメッセージ本文やログイン認証情報が見えてしまいます。最近の受信側サーバーのほとんどは、メールを受け付ける際に暗号化された接続を優先するか、必須としています。

運用上の考慮事項

重大なリスクとして、攻撃者がサーバーの応答からSTARTTLSを取り除き、クライアントに平文でメールを送らせるダウングレード攻撃があります。これを防ぐため、管理者はMTA-STSを導入するか、TLSを必須に設定できます。SendHQの無料ツール(https://sendhq.cc/tools)を使えば、ドメイン全般の設定を確認し、配信を改善できます。

実装でよくある間違い

よくある誤りは、STARTTLSと暗黙的TLSを混同することです。STARTTLSは平文のポート(587など)で始まってからアップグレードしますが、暗黙的TLS(ポート465)ではSMTPコマンドを送る前に安全なハンドシェイクが必要です。ポートの設定を誤ったり、有効なSSL証明書を用意していなかったりすると、接続に失敗するか、安全でない送信にフォールバックします。

具体例

クライアントがポート587に接続してEHLOを送ります。サーバーは250-STARTTLSと応答します。クライアントはSTARTTLSを送ります。サーバーは220 Ready to start TLSと応答します。クライアントとサーバーは鍵をネゴシエートしてセッションを暗号化します。その後、クライアントはAUTH LOGINを送り、ネットワーク上に露出させることなく安全に認証情報を渡します。

よく寄せられる質問

STARTTLSはSSL/TLSと同じものですか?

STARTTLSは既存の平文の接続上でTLSセッションを開始するためのコマンドであり、SSL/TLSは基盤となる暗号化プロトコルそのものを指します。

STARTTLSが失敗するとどうなりますか?

デフォルトでは、ほとんどのサーバーは日和見的TLSを使います。つまり、TLSを必須にする明示的な設定がない限り、ハンドシェイクに失敗すると平文にフォールバックします。

STARTTLSには通常どのポートが使われますか?

ポート587がSTARTTLSを使う標準のサブミッション用ポートですが、サーバー間のリレーではポート25でもよく使われます。

一次情報源