← RFC Reference

RFC 3207 – SMTP STARTTLS拡張機能

Proposed Standard Transport Security Obsoletes RFC 2487 Published March 2026
ELI5: 混雑した部屋での会話を想像してください。誰でも聞くことができます。STARTTLSは会話の途中で「プライベートルームに行きましょう」と言うようなものです。最初はプレーンテキストでSMTPセッションを開始し、機密情報が交換される前に両側が暗号化通信に切り替えることに同意します。その後、誰もメール転送を盗聴することはできません。

このRFCが存在する理由

SMTPが1982年に設計されたとき、暗号化は考慮されていませんでした。メッセージはインターネット上を平文で移動し、ネットワークパスにアクセスできる誰もがそれらを読むことができました。インターネットがより敵対的になるにつれて、転送中のメール暗号化が不可欠になりました。

RFC 3207は、SMTP用のSTARTTLS拡張を定義し、平文のSMTP接続を暗号化されたTLS接続にアップグレードできるようにします。2002年に公開されたこれは、セキュリティに関する考慮事項とサーバーの動作の説明でRFC 2487に置き換わりました。

STARTTLSはポート25のサーバー間(MTA間)メールトラフィックを暗号化するための支配的なメカニズムです。クライアント間サブミッション用に、RFC 8314はポート465での暗黙的なTLSを推奨していますが、ポート587でのSTARTTLSは広く使用されています。

動作方法

STARTTLSはSMTP拡張として機能し、EHLO交換中にネゴシエートされます。

  1. クライアントはポート25(または587)でサーバーに平文で接続します。
  2. クライアントがEHLOを送信します。サーバーはその機能を応答し、暗号化をサポートする場合は250-STARTTLSを含みます。
  3. クライアントがSTARTTLSを送信します。
  4. サーバーが220 Ready to start TLSで応答します。
  5. 両側がTLSハンドシェイクを実行し、暗号化チャネルを確立します。
  6. クライアントが暗号化された接続で新しいEHLOを送信します。サーバーの機能リストが変わる可能性があります(例:AUTHが現在アドバタイズされています)。
  7. SMTPセッションは通常通り続きますが、すべてのトラフィックは暗号化されています。

SMTP例

サーバー間転送中のSTARTTLSネゴシエーション:

# ポート25での平文接続が確立されました S: 220 mx.example.com ESMTP C: EHLO sender.example.net S: 250-mx.example.com S: 250-SIZE 52428800 S: 250-STARTTLS S: 250 ENHANCEDSTATUSCODES # クライアントはSTARTTLSが利用可能であることを認識し、アップグレードをリクエストします C: STARTTLS S: 220 2.0.0 Ready to start TLS # --- TLSハンドシェイクがここで発生します --- # 以降のすべてのトラフィックは暗号化されています # クライアントはTLS後にEHLOを再発行する必要があります C: EHLO sender.example.net S: 250-mx.example.com S: 250-SIZE 52428800 S: 250-AUTH PLAIN LOGIN S: 250 ENHANCEDSTATUSCODES # 注:STARTTLSはもうアドバタイズされていません(既にアクティブです) # 注:AUTHは現在アドバタイズされています(TLS後にのみ利用可能) C: MAIL FROM:<alice@sender.example.net> S: 250 2.1.0 OK C: RCPT TO:<bob@example.com> S: 250 2.1.5 OK C: DATA S: 354 Start mail input C: [メッセージコンテンツ...] C: . S: 250 2.0.0 OK

主要な技術詳細

日和見的vs必須TLS

RFC 3207で定義されているSTARTTLSの重大な制限は、デフォルトでは日和見的であることです:

日和見的TLSはダウングレード攻撃に対して脆弱です。ネットワーク攻撃者はEHLO応答からSTARTTLS機能を削除でき、接続を平文のままにします。初期ネゴシエーションが平文で行われるため、クライアントはサーバーがTLSをサポートしていることを知る方法がありません。

証明書検証

RFC 3207はMTA間接続に対して厳格な証明書検証を要求しません。実際には、多くのサーバーは自己署名証明書またはMXホスト名と一致しない証明書を使用しています。根拠:検証なしの日和見的暗号化は依然として暗号化なしより優れています。受動的な監視から保護しますが、アクティブな中間者攻撃を防ぐことはできません。

より強力な保証のために、以下を使用します:

STARTTLS後のRe-EHLO

TLSハンドシェイクが完了した後、クライアントは新しいEHLOコマンドを発行する必要があります。TLS前のサーバーの機能リストは破棄される必要があります。これが重要な理由は:

異なるポートでのSTARTTLS

ポート プロトコル TLS動作
25 SMTPリレー STARTTLS(MTA間で日和見的)
587 サブミッション STARTTLS(実質的に必須 — AUTHはそれを要求します)
465 サブミッション 暗黙的TLS(SMTPコマンド前にTLSハンドシェイク)

TLSレポーティング

RFC 8460はSMTP TLSレポーティング(TLSRPT)を定義し、ドメイン所有者がTLS接続失敗に関するレポートを受け取ることができます。これはDMARC集計レポートに相当するSTARTTLSです — サーバーへの接続がTLSネゴシエーションに失敗しているときに通知します。

_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@example.com"

一般的な間違い

配信性への影響

Related RFCs