メール中継時のTLS暗号化
今回のレビュー依頼は、メール送受信を行う中継サーバーから、特定の宛先へメールを送信する際に、TLSによる暗号化を適用するという内容だった。
背景として、メール中継サーバー側で「どの宛先に対してTLSを使用するか」の指定がされていなかったため、送信先のメールサーバー側のポリシーにより、暗号化されていない通信が拒否されていたことがある。
その対応として、PostfixのTLSポリシーファイルに対象ドメインを追加し、該当宛先に対してTLS通信を強制する設定を行う、というものだった。
ここでポイントになるのが、SMTPと暗号化の関係である。
もともとSMTPは平文通信が前提のプロトコルであり、そのままでは通信内容は暗号化されない。一方で、STARTTLSという仕組みを使うことで、通信の途中からTLSによる暗号化に切り替えることができる。
ただし、STARTTLSは「Opportunistic TLS(日和見暗号)」と呼ばれる性質を持っており、いくつかの重要なリスクがある。
- ダウングレード攻撃のリスク
通信経路上の攻撃者が、SMTPのハンドシェイク中に暗号化の要求(250-STARTTLSなど)を削除して「TLS非対応」を装うことで、強制的に平文通信に誘導される可能性がある。 - 証明書検証の甘さ
デフォルトの設定では、相手の証明書が自己署名や期限切れであっても、そのまま暗号化通信を継続してしまうケースがある。
つまり、STARTTLSは「暗号化されることもある」仕組みであり、「必ず安全に暗号化される」ことを保証するものではない。
そのため、今回のようにPostfixのTLSポリシー(smtp_tls_policy_maps)を設定することは、「日和見」から「強制」への重要なステップとなる。
これにより、意図せず平文でインターネット上にメールが流れることを防ぎ、暗号化を“確実に担保”することができる。
さらに注意すべき点として、単に暗号化されていればよいわけではなく、使用する暗号方式の強度も重要である。
規定上、「電子政府推奨暗号リスト」に準拠した暗号スイートを使用する必要があるため、Postfixの設定においても、許可するプロトコルバージョンや暗号スイートがこれに適合しているかを確認する必要がある。
つまり今回のレビュー観点としては、
- TLSが使われているかだけでなく、必須化されているか
- STARTTLSの性質(ダウングレードや検証不備)を踏まえた設計になっているか
- さらに適切な強度の暗号が使われているか
という多層的な視点で確認することが重要になる。
