StartTLSとは?
- 2020年6月26日
- by SendGrid
- Category: 技術ネタ
この記事は What is StartTLS? の抄訳です。
あるサーバから別のサーバにメールがどのようにして安全に送信されるか疑問に思ったことはないでしょうか?メール送信用プロトコルSMTP(Simple Mail Transfer Protocol)では、StartTLSとTLS(Transport Layer Security)またはSSL(Secure Sockets Layer)を組み合わせてメールを暗号化し、受信トレイに安全に届けます。
では、StartTLSとはどのようなものでしょうか?
StartTLSは、メールクライアントが使用するプロトコルコマンドで、安全でない接続からTLSまたはSSLを使用して安全な接続にアップグレードすることをメールサーバに通知する際に使用します。StartTLSはSMTPとIMAPで使用されます。一方、POP3ではSTLSと呼ばれる少し異なるコマンドが、同じ目的のために使用されます。
今回は、TLSとSSLの違い、StartTLSの詳細、そしてStartTLSのテスト方法について詳しく見ていきます。
StartTLSの仕組み
TLS vs. SSL
StartTLSは、名前に「TLS」と入っていますが、TLSとSSLどちらの暗号化プロトコルと組み合わせても利用できます。
また、SSLよりもTLSを使用することをお勧めします。SSLは古いプロトコルであり、後継のTLSほど安全ではありません。ちなみに、SSLv2とSSLv3は共に非推奨となっています。
参考までに、SSLとTLSのプロトコルを古いものから順番に並べると以下のようになります:
SSLv2, SSLv3, TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3
これらのプロトコルでは、メールクライアントとサーバ双方が、使用するバージョンについて合意する必要があります。これはメールクライアントがTLSv1.3をサポートしていても、サーバがTLSv1.2までしかサポートしていない場合、暗号化を行うには双方がTLSv1.2を使用する必要があることを意味しています。
TLSとSSLの詳細についてはドキュメントをご覧ください。
StartTLSの詳細
SMTPは常に暗号化されていない状態で通信を開始し、StartTLSコマンドで、サーバとクライアント間のネゴシエーションを開始します。その際に発生する通信の概要は以下の通りです。
- メールクライアントとサーバがお互いを認識できるようTCP(Transmission Control Protocol)のハンドシェイクから始まります。
- サーバは、220 Readyを返してクライアントが通信を続行できること通知します。
- クライアントは、拡張SMTP(画像や添付ファイルなどを含めることができるSMTPのより高度なバージョン)を使用する旨を通知するために、サーバに「EHLO」を送信します。
- クライアントは、サーバに「250-STARTTLS」を送信し、StartTLSが受け入れられるかどうかを問い合わせます。
- サーバが「go head」を返した場合、StartTLS接続が確立します。
- クライアントが再接続し、メールメッセージが暗号化されます。
以上のプロセスを視覚的に表現すると以下のようになります。
使用するポートは?
StartTLSでは、587番ポートが最も使用されます。他にも、暗号化されたメールを送信するために、25、465、および2525などのポートが使用されます。25番ポートはサーバ間のメール転送で使用するものであり、クライアントからの送信用ではないため、ISPはこのポートを介して送信されたメールをブロックする可能性があります。また、587番ポートの次に使用頻度が高いのは465番ポートです。
日和見TLS vs. 強制TLS
メールを暗号化して送信するには、日和見TLSまたは強制TLS のいずれかを利用します。
日和見TLS(または明示的TLS)を利用すると、サーバが受け入れる最高の暗号化レベルで送信できます。サーバがTLSを受け入れない場合、クライアントはサーバとネゴシエートし、暗号化されていない接続にダウングレードすることに合意します。合意に達すると、メッセージは暗号化されずに送信されます。この方式には、暗号化されたメールと暗号化されないメール両方で同じポートを使用できる利点があります。
一方、強制TLS(または暗黙的TLS)は、メールの送信に安全な接続を要求します。接続が暗号化されていない場合、メールは送信されません。この方法は日和見TLSよりもはるかに安全ですが、より多くのメールが破棄されることになります。
どちらの方式ともメールの世界では広く使われています。機密性の高い個人情報を含むメールを送信する場合は、強制TLSを使用するのがベストかもしれません。一方、マーケティングやプロモーションメールのようなセンシティブでない内容を送信する場合は、日和見TLSを使用するのが良いでしょう。
その他のTLSのユースケース
TLSは、メール以外のさまざまな通信の暗号化に使われています。TLSは比較的シンプルかつ多段階のプロトコルであるため、さまざまな通信に容易に対応することができます。これには、Webブラウザにおける通信や、SMS、Voice over IPなどが含まれます。実際、多くの企業では、通信の大部分が機密事項でなくても、TLSを使用してWebサーバ〜ブラウザ間のすべての通信を暗号化しています。
TwilioがTLSをどのように使用しているかの詳細については、Twilioのセキュリティページをご覧ください。
StartTLSがなぜ重要なのか?
元々SMTPは安全ではありません。これは、StartTLSを使用せずにSMTPでメールを送信すると、傍受され、簡単に盗聴されてしまうことを意味しています。ユーザ名、パスワード、銀行の情報などの機密性の高い個人情報を送信する場合に特に懸念されます。
StartTLSがないと、個人情報が盗まれるリスクがあります
メールクライアントがStartTLSを使用すると、メッセージは暗号化されて送信されます。仮に傍受されても解読は非常に困難です。メッセージを解読するための鍵を持っているのは、メールサーバとクライアントだけです。
欠点
StartTLSにはいくつかの欠点もあります。まず、クライアント〜サーバ間の最初の接続では、IPアドレスが暗号化されていないため、中間者攻撃の影響を受けやすい点です。
また、StartTLSを使わないSMTP接続と比べて、遅延が発生する可能性があります。使い物にならないほどの遅延ではありませんが、ある程度の影響があることを覚えておくと良いでしょう。
StartTLSのテスト方法
サーバがStartTLSに対応しているかどうかを事前にテストすることは重要です。StartTLSに対応していない場合、意図せずメールを暗号化せずに送信してしまい、結果として、攻撃を受けやすくなってしまいます。
以下は、SendGridのSMTPサーバでStartTLSをテストする例です。
$ telnet smtp.sendgrid.net 25 Trying 167.89.118.58... Connected to smtp.sendgrid.net. Escape character is '^]'. 220 SG ESMTP service ready at ismtpd0017p1las1.sendgrid.net EHLO 250-smtp.sendgrid.net 250-8BITMIME 250-PIPELINING 250-SIZE 31457280 250-STARTTLS 250-AUTH PLAIN LOGIN 250 AUTH=PLAIN LOGIN
Twilio SendGridにおけるStartTLSの利用
Twilio SendGridはTLS v1.2以上をサポートしています。非暗号化およびTLS接続はポート25、587、2525で受け付けています。または、465番ポートでSSLを使って接続することもできます。
SendGridは日和見TLSをサポートしており、宛先サーバが対応している最高の暗号化レベルで送信します。また、強制TLS機能にも対応しており、お客様が選択できます。強制TLS機能を選択した状態で宛先サーバが暗号化通信を受け付けない場合、メッセージは削除され、Blockイベントが発生します。
お客様がStartTLSを使用するのは、主にTwilio SendGridに対してSMTP接続を行うタイミングです。一方、Twilio SendGridから宛先サーバへの送信時における、TLS証明書の検証や暗号化プロセス、その他の問題の処理は、Twilio SendGridが行います。
Twilio SendGridとSMTPの詳細については、ドキュメント「How to Send an SMTP Email」をご覧ください。