POP3やIMAP、SMTPといったプロトコルは通信プロトコルにおいて暗号化をサポートしていません。もし通信をSSL化する場合にはSMTP over SSL/TLSのような形で、別途ポートを設けることが多いです。
今回はそんなメールの送受信データを暗号化するもう一つの方法、STARTTLSについて紹介します。
STARTTLSとは
STARTTLSはSMTPやPOP3、IMAPなどをデフォルトのポートのまま、平文から暗号化通信に変更する仕組みです。メール関係だけでなく、他の通信プロトコルでも規定されています。
- FTP
- XMPP
- LDAP
- NNTP
telnetで試す
telnetでSMTPサーバに接続し STARTTLS
を入力するとTLSに切り替わります。なお、telnetはTLSネゴシエーションには対応していないので、ここで処理は終わるでしょう。
$ telnet smtp.gmail.com 587 Trying 9999:9999:9999:c04::6d... Connected to smtp.gmail.com. Escape character is '^]'. 220 smtp.gmail.com ESMTP XXXXX.99 - gsmtp HELO example.com 250 smtp.gmail.com at your service MAIL FROM: <user@example.com> 530 5.7.0 Must issue a STARTTLS command first. XXXXX.99 - gsmtp STARTTLS 220 2.0.0 Ready to start TLS
TLSの種類
最近ではSMTPSに対応したSMTPサーバが増えており、STARTTLSを実行するケースは多くないかもしれません。SMTPSはSMTP over SSL/TLSと呼ばれるもので、暗黙的TLSを呼ばれます。自動的にTLSが適用される仕組みです。同じようにPOP3S、IMAP4Sがあります。
STARTTLSはクライアント側から明示的にTLS開始を宣言するため、明示的TLSと呼ばれます。なお、STARTTLSは25番ポートを利用できるので、サーバ間でのリレーにおいても利用されます。
Gmailによる表示
Gmailでは2016年から、TLSをサポートしていないメールサーバに対して送信を行う際に、セキュアではないことを意味するアイコンが表示されるようになりました。
また、送られてきたメッセージに対して写真やアイコンが表示されず、はてなアイコンが出るようになっています。
Building a safer web, for everyone
まとめ
通信がTLSによってセキュアになることで、なりすましや盗聴などを避けられるようになります。WebサイトがSSL化するのが当たり前になっているのと同様に、メール送信においてもセキュアなメッセージングを心がける必要があるでしょう。