本文へスキップ
ecdsa.com

STARTTLS

既存の平文の接続を TLS に切り替えるプロトコルコマンドで、SMTP(RFC 3207)、IMAP、POP3、LDAP、XMPP で使われます。ポリシーで TLS を必須にしない限り、ダウングレードされるおそれがあります。
別表記STARTTLSRFC 3207opportunistic TLS

SMTP では、クライアントが EHLO を送り、機能一覧に 250-STARTTLS があることを確認して STARTTLS を送ると、同じ TCP 接続上で TLS ハンドシェイクが行われます(サーバー間はポート 25、クライアントからのメール送信は 587)。メールサーバー間では日和見的に使われます。経路上の攻撃者がこの機能の告知を取り除けば送信者は平文のまま続行し、また送信者は通常どんな証明書でも受け入れます。

対策はポリシーの層から得られます。MTA-STS(RFC 8461)と DANE(RFC 7672)を使うと、受信側のドメインは認証された TLS を要求でき、TLS-RPT(RFC 8460)は失敗を報告します。クライアントからのアクセスについて、RFC 8314 は STARTTLS よりも暗黙的 TLS(ポート 465、993、995)を推奨しています。切り替え前のコマンドインジェクション(バッファーに残った平文が TLS 経由で届いたかのように処理される)のような実装上のバグは、多くのメールサーバーに影響を与えてきました。

openssl s_client -starttls smtp -connect mx.example.com:25 を実行すると、証明書とネゴシエートされたパラメーターが表示されます。STARTTLS チェッカーでも同じテストを実行できます。

規格と参考文献

すべての用語