技術解説 · 出典付きの回答
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でもよく使われます。
一次情報源
- RFC 3207:トランスポート層セキュリティ(TLS)上のセキュアなSMTPのためのサービス拡張 — RFC Editor
- RFC 8314:SMTP以外のメールプロトコルにおける平文通信の扱い — RFC Editor