← RFC Reference

TLSとメールセキュリティ

Email Concepts Encyclopedia Published March 2026
ELI5: 絵葉書を送ることと封筒を送ることを想像してみてください。TLSがなければ、メールは絵葉書です。途中で扱う誰もが中身を読むことができます。TLSが封筒です。STARTTLSは郵便局に「これを封筒に入れてくれませんか?」と尋ねるようなものです。応じてくれるかもしれませんが、悪意のある者がその質問を傍受して「いいえ、ここではそんなことはしていません」と言うことができます。MTA-STSとDANEは「この郵便局は常に封筒を使います。そうでないと言う者を信用しないでください」というルールを公開する方法です。

TLSがメール転送をどのように保護するか — STARTTLS、インプリシットTLS、MTA-STS、DANE、TLSRPT — および日和見暗号化が十分でない理由。

問題:SMTPは暗号化なしで設計された

SMTPは1982年(RFC 821)にプレーンテキストプロトコルとして設計された。すべてのコマンド、すべてのレスポンス、すべてのヘッダー、メッセージコンテンツのすべてのバイトがネットワーク上で暗号化されずに送信された。AUTHで送信されたパスワードは事実上、部屋全体に向かって叫ばれていた。

TLS(トランスポートレイヤーセキュリティ)をSMTPに層状に配置してこれを修正した。しかし、HTTPS — TLSが必須かつ普遍的である — とは異なり、メールTLSは今日でもまだ解決されている一連の不完全な妥協を通じて進化してきた。

STARTTLS:日和見暗号化

STARTTLS(RFC 3207)は既存のプレーンテキストSMTP接続をTLSにアップグレードする。プロセス:

# ポート25のプレーンテキストで接続開始
220 mx.example.com ESMTP
EHLO sender.example.net
250-mx.example.com
250-STARTTLS
250 SIZE 26214400
STARTTLS
220 Ready to start TLS
# TLSハンドシェイク開始
# クライアントとサーバーがTLSバージョン、暗号スイート、証明書を交渉
# 接続は暗号化された
EHLO sender.example.net
250-mx.example.com
250 SIZE 26214400

STARTTLSについての要点:

STARTTLSストリッピング攻撃

STARTTLSはプレーンテキストで開始されるため、中間者攻撃者はサーバーのEHLOレスポンスを変更してSTARTTLSアドバタイズメントを削除できる。送信MTAはサーバーがTLSをサポートしていないと考え、プレーンテキストで続行する。その後、攻撃者はメッセージを読み取り、変更することができる。

# サーバーが実際に送信するもの:
250-mx.example.com
250-STARTTLS
250 SIZE 26214400

# 攻撃者がそれを変更したもの:
250-mx.example.com
250 SIZE 26214400
# STARTTLSラインが削除 — 送信者はプレーンテキストにフォールバック

これは理論的な攻撃ではない。特に大量監視を実施している国で、野生で観察されている。日和見的STARTTLSは能動的な攻撃者に対する保護を提供しない — 受動的な盗聴からの保護のみを提供する。

インプリシットTLS:最初のバイトからの暗号化

RFC 8314はメール送信(クライアント間)に対してインプリシットTLSを推奨している。プレーンテキストで開始してアップグレードする代わりに、接続は最初のバイトからTLSである。

RFC 8314は、TLSなしでポート587でのプレーンテキストSMTP送信が廃止されたこと、およびポート465でのインプリシットTLSが優先送信パスであることを明確に宣言する。実際には、ポート587とSTARTTLSは引き続き広く導入されているが、方向は明確である:インプリシットTLSが将来である。

しかし、インプリシットTLSは送信パス(クライアントからサーバー)にのみ適用される。ポート25でのサーバー間配信は、受信者のMXがインプリシットTLSをサポートしていることをサーバーが事前に知るための普遍的に導入されたメカニズムがないため、引き続きSTARTTLSを使用する。これがMTA-STSとDANEの出番である。

MTA-STS:ポリシーベースのTLS強制

MTA-STS(RFC 8461)はSTARTTLSストリッピング問題を解決し、ドメインが「メール配信時に常にMXサーバーへのTLSを必要とする」ポリシーを発行できるようにする。ポリシーはHTTPS(DNS以外)を通じて発行され、Web PKIを通じて独自の認証を提供する。

MTA-STSの仕組み

  1. ドメインはMTA-STSポリシーが存在することを示すDNS TXTレコードを発行:
_mta-sts.example.com. IN TXT "v=STSv1; id=20260311"
  1. 送信MTAはウェルノーンURLからHTTPS経由でポリシーを取得:
https://mta-sts.example.com/.well-known/mta-sts.txt
  1. ポリシーファイルはモードと有効なMXホスト名を指定:
version: STSv1 mode: enforce mx: mx1.example.com mx: mx2.example.com max_age: 604800
  1. 送信MTAはポリシーをキャッシュ(max_age秒間)し、すべての将来の接続で強制する。次の操作を実行:
    • ポート25でSTARTTLSを必須(プレーンテキストへのフォールバックなし)
    • MXホスト名に対するサーバーのTLS証明書を検証
    • ポリシーにリストされたMXホスト名へのみ配信

MTA-STSモード:

MTA-STSはWebと同じ信頼モデルを持つ:認証局に依存する。CAが侵害された場合、攻撃者はMXの証明書を偽造する可能性がある。DANEはDNSSECに基づく代替信頼モデルを提供する。

DANE:DNSベースの証明書検証

DANE(RFC 7672)はDNSSECで署名されたTLSAレコードを使用してTLS証明書(またはその公開鍵)をMXホスト名に直接関連付ける。これは認証局への依存を削除する。

; ポート25でmx1.example.comのTLSAレコード _25._tcp.mx1.example.com. IN TLSA 3 1 1 a]b2c3d4e5f6...

TLSAレコードフィールド:

メール用DANEの仕組み

  1. 送信MTAはMXレコードを解決してmx1.example.comを取得。
  2. _25._tcp.mx1.example.comでTLSAレコードをクエリ。
  3. DNSSEC検証済みのTLSAレコードが存在する場合、MTAは以下を知る:
    • TLSは必須(プレーンテキストへのフォールバックなし)。
    • サーバーの証明書はTLSAレコードと一致する必要がある。
  4. MTAは接続し、STARTTLSを実行し、CA システムの代わりに(または加えて)TLSAレコードに対してサーバーの証明書を検証。

DANEの長所:認証局に依存しない。短所:多くのドメインが導入していないDNSSECが必須。DNSSECなしでは、DANEレコードを信頼できない(DNSを操作できる攻撃者もTLSAレコードを操作できる)。

DANEとMTA-STSの比較

MTA-STS DANE
信頼モデル Web PKI(認証局) DNSSEC
必須 HTTPSホスティング + DNS TXTレコード ドメイン上のDNSSEC
導入 デプロイが容易;DNSSEC不要 DNSSECが必須;デプロイが困難
脆弱性 侵害されたCAが証明書を偽造可能 侵害されたDNSSECがTLSAレコードを偽造可能
初回接触 初回ポリシー取得時に脆弱(TOFU) 初回接続から安全(DNSSECが有効な場合)
送信者サポート Gmail、Outlook、Yahoo、ほとんどの主要プロバイダ Postfix、Exim;大規模プロバイダでの対応限定

両メカニズムは共存できる。ドメインはMTA-STSポリシーとDANEポリシーの両方を発行できる。DANEをサポートする送信者はそれを使用;サポートしない者はMTA-STSにフォールバック可能。

TLSRPT:TLSレポート

SMTP TLSレポート(RFC 8460)により、ドメインは送信サーバーからのTLS接続失敗に関するレポートを受け取ることができる。これはTLSの同等物のDMARC集約レポートである。

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

TLSRPTをサポートする送信MTAは日々のJSONレポートを送信し、詳細を記す:

TLSRPTはMTA-STSデプロイ中に不可欠である。MTA-STSポリシーでmode: testingで開始し、TLSRPTレポートを監視。ゼロ(または許容可能な)失敗を確認したら、mode: enforceに移行。

証明書管理

TLSは証明書を必要とし、証明書管理はメールセキュリティにおける最も一般的な運用失敗ポイントの1つである。

メールサーバーの証明書

証明書エラーとその影響

エラー MTA-STS/DANEなし MTA-STS/DANEあり
有効期限切れ証明書 ほとんどの送信者はそれを無視し、とにかく配信 配信失敗;メッセージは延期
誤ったホスト名 ほとんどの送信者はそれを無視 配信失敗
自己署名証明書 ほとんどの送信者がそれを受け入れ 配信失敗(MTA-STS);パス可能(DANE、TLSAが一致する場合)
失効証明書 めったにチェックされない 実装に依存

このテーブルは日和見的TLSの核心問題を明らかにする:MTA-STSまたはDANEなしでは、ほとんどの証明書エラーは無視される。接続は暗号化されるが、認証されない — 攻撃者のサーバーにメッセージを暗号化しているかもしれない。

メール暗号化の状態

メール暗号化は2つのレベルに存在し、しばしば混同される:

トランスポート暗号化(TLS)

TLSはサーバー間の接続を暗号化。転送中の任意の2つのポイント間でのメッセージの盗聴から保護。メッセージが宛先サーバーに到着すると、プレーンテキストで復号化される(通常)。TLSはトランスポートを保護し、メッセージではない。

トランスポート暗号化はホップバイホップ:メッセージはサーバーと次のサーバー間で暗号化され、その後復号化され、次のホップ用に再暗号化。各中間サーバーはプレーンテキストメッセージへのアクセス権を持つ。

エンドツーエンド暗号化(S/MIME、PGP)

エンドツーエンド暗号化(RFC 8551あたりのS/MIME、またはPGP/OpenPGP)はメッセージコンテンツ自体を暗号化し、正しい秘密鍵を持つ意図された受信者のみがそれを復号化できる。メッセージはサーバーで保存中、およびすべてのトランジットホップ中に暗号化されたままである。

メール内のエンドツーエンド暗号化の導入は非常に低いままである。理由は実用的:

ほとんどのメールについて、トランスポートレベルのTLSは実用的な暗号化層である。エンドツーエンド暗号化は、運用上の負担が正当化される高セキュリティ環境で使用される限定的なままである。

TLSを要求(RFC 8689)

RFC 8689はメッセージごとのTLS要求メカニズムを定義。送信者は個々のメッセージにREQUIRETLS SMTP拡張を追加:

MAIL FROM:<alice@example.com> REQUIRETLS
250 OK

REQUIRETLSが設定される場合:

REQUIRETLSはメッセージレベル — すべてのメールにTLSを必須にすることなく機密メッセージに使用可能。しかし、導入は依然として限定的。ほとんどのサーバーはまだそれをサポートしていない。

実用的デプロイメントガイド

ドメインのメール用TLSをデプロイするための推奨シーケンス:

ステップ1:MXサーバーでTLSを確保

すべてのMXホスト名に対して公開CAから有効な証明書を取得。更新を自動化。外部送信者からのSTARTTLSが正しく機能することをテスト。

ステップ2:TLSRPTをデプロイ

_smtp._tls TXTレコードを発行してTLS失敗レポートを受け取る。何かを強制する前に監視を開始。

ステップ3:テストモードでMTA-STSをデプロイ

DNS TXTレコードとHTTPSポリシーファイルをmode: testingで発行。TLSRPTレポートを監視して失敗を確認。問題を調査して修正。

ステップ4:MTA-STSをenforceモードに移行

TLSRPTレポートがクリーン結果を示した場合、モードをenforceに変更。DNS TXTレコードでidを増加させてポリシー変更を合図。

ステップ5:DANEを検討(DNSSECを使用する場合)

ドメインがDNSSEC署名されている場合、MXサーバーのTLSAレコードを発行。CAシステムから独立した証明書ピンニングの追加レイヤーを提供。

何が間違う可能性があるか

有効期限切れ証明書は配信失敗を引き起こす

MXサーバーの証明書が有効期限切れ。MTA-STSなし、ほとんどの送信者はエラーを無視してとにかく配信(安全ではないが機能的)。enforce モードのMTA-STS、証明書を検証する送信者は配信を延期。メッセージは送信側でキューイング。送信側の再試行ウィンドウ内(通常4~5日)に修正しない場合、メッセージはバウンス。修正:Let's Encrypt / ACMEでの自動化された証明書更新。

MX変更後のMTA-STSポリシーミスマッチ

新しいMXサーバー(mx3.example.com)を追加するが、MTA-STSポリシーファイルに追加するのを忘れる。キャッシュされたポリシーを持つ送信者は、ポリシーのリストにないため、新しいMXへの接続を拒否。修正:新しいMXレコードを追加する前にMTA-STSポリシーファイルを常に更新し、ポリシーidをDNSで増加させる。

STARTTLSストリッピングが検出されない

MTA-STSもDANEもなし、攻撃者がサーバーのEHLOレスポンスからSTARTTLSを削除。メッセージはプレーンテキストで配信。送信者も受信者も認識なし。修正:MTA-STSをデプロイしてTLSストリッピングを検出可能かつ防止可能にする。

DANE TLSAレコードが古くなる

TLS証明書を回転させるが、DNSのTLSAレコードを更新するのを忘れる。DANEを検証する送信者はミスマッチを確認し、配信を拒否。修正:新しい証明書をデプロイする前にTLSAレコードを常に更新。証明書デプロイメントをDNS更新と調整する自動化を使用。

重要な取り組み

さらに読む

Related RFCs