STARTTLSとは?メール送信を暗号化する仕組みやエラー対処法を解説!

この記事は What is StartTLS? の抄訳です。

メールがサーバからサーバへとどのように安全に送信されるのか、疑問に思ったことはありませんか?
メール送信用のプロトコルであるSMTPでは、STARTTLSによって通信をTLS(またはSSL)に切り替えて暗号化することで、メールをより安全に送信できます。(現在は主にTLSが使用されます)

では、STARTTLSとはどのようなものでしょうか?

STARTTLSは、通信を暗号化するために使用されるコマンドです。暗号化されていない接続をTLSまたはSSLによる暗号化接続へ切り替えたい旨を、接続先のサーバに通知する際に使用されます。STARTTLSはSMTPとIMAPで使用され、POP3では同様の目的でSTLSと呼ばれる少し異なるコマンドが使用されます。

今回は、STARTTLSとTLSの違いやSTARTTLSの仕組み、そしてSTARTTLS接続のトラブルシューティングについて詳しく紹介します。

STARTTLSとTLSの違い

STARTTLSとTLSは競合するものではなく、連携して動作します。TLSは実際にデータを保護する暗号化プロトコルであり、STARTTLSはその暗号化処理を開始するためのコマンドです。

STARTTLSの特徴は以下のとおりです。

  • クライアントとサーバの間で、暗号化されていない接続を暗号化接続へ切り替えるために使用される
  • TLSおよび古い規格であるSSLの両方に対応している

TLSの特徴は以下のとおりです。

  • 送受信されるデータを暗号化し、メールのコンテンツを保護する
  • TLS 1.0、1.1、1.2、1.3といった複数のバージョンが存在する(TLS 1.0と1.1は現在非推奨)
  • STARTTLSコマンドの有無に関わらず利用できる

STARTTLSであれば、暗号化された接続と暗号化されていない接続の両方を同じポートで処理できるため、柔軟なメールの運用が可能です。一方、STARTTLSを使わない場合は、安全な通信とそうでない通信でそれぞれ別のポートを用意する必要があります。これは、465番ポートを使用する暗黙的TLSで採用されている方式です。

Twilio SendGridのTLS通信についてはこちらでも紹介しています。

STARTTLSの仕組み

STARTTLSによる暗号化プロセスを具体的に見ていきましょう。
SMTP通信は毎回暗号化されていない状態で開始され、STARTTLSコマンドをきっかけにサーバとクライアント間のネゴシエーションが始まります。その際の通信の概要は以下のとおりです。

  1. クライアントとサーバがお互いを認識するために、TCPハンドシェイクを行います。
  2. サーバは「220 Ready」を返し、クライアントに対して通信を続行できることを通知します。
  3. クライアントは「EHLO」を送信し、ESMTP(画像や添付ファイルなどを扱える拡張版SMTP)を使用することをサーバへ伝えます。
  4. サーバは「250-STARTTLS」を返し、自身がSTARTTLSに対応していることをクライアントに通知します。
  5. クライアントは「STARTTLS」を送信し、暗号化を要求します。
  6. サーバは「220 Go ahead」などの応答を返し、以降クライアントとサーバ間でTLSネゴシエーションが始まります。TLSのバージョンは、クライアントとサーバの双方が対応しているバージョンのうち最も高いものが使用されます。ネゴシエーションが行われる間、SMTP通信は一時停止されます。
  7. TLSネゴシエーションが完了した後、クライアントがSMTP通信を再開します。以降のメール通信は暗号化された状態で行われます。

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、VoIPなど、さまざまな通信に容易に対応することができます。実際、多くの企業では、通信の大部分が機密事項でなくても、TLSを使用してWebサーバとブラウザ間のすべての通信を暗号化しています。

TwilioがTLSをどのように使用しているかの詳細については、Twilioのセキュリティページをご覧ください。

STARTTLSがなぜ重要なのか?

元々SMTPは安全ではありません。STARTTLSを使用せずにSMTPでメール送信すると、傍受され、簡単に解読されてしまう可能性があります。ユーザ名やパスワード、銀行の情報など機密性の高い個人情報を送信する場合には特に注意が必要です。

クライアントがSTARTTLSを使用すると、メッセージは暗号化されて送信されます。仮に傍受されても解読は非常に困難です。メッセージを解読するための鍵を持っているのは、サーバとクライアントだけです。

欠点

STARTTLSにはいくつかの欠点もあります。まず、クライアントとサーバ間の最初の接続では、IPアドレスが暗号化されていないため、中間者攻撃の影響を受けやすい点です。

また、STARTTLSを使わないSMTP接続と比べて、若干の遅延が発生する可能性があります。使い物にならないほどの遅延ではありませんが、ある程度の影響があることを覚えておくと良いでしょう。

STARTTLSの対応状況を確認する方法

サーバがSTARTTLSに対応しているかどうかを事前に確認しておくことは重要です。STARTTLSに対応していない場合、意図せず暗号化されていないメールを大量送信してしまい、その結果、攻撃の標的にされてしまう恐れがあります。

以下は、SendGridのSMTPサーバでSTARTTLSの対応状況を確認する方法の例です。クライアントからEHLOを送信した後、サーバからの応答に「250-STARTTLS」が含まれていれば、そのサーバがSTARTTLSに対応していることが分かります。

> telnet smtp.sendgrid.net 587
Trying 167.89.118.58...
Connected to smtp.sendgrid.net.
Escape character is '^]'.
220 SG ESMTP service ready at geopod-ismtpd-13
> EHLO
250-smtp.sendgrid.net
250-8BITMIME
250-PIPELINING
250-SIZE 31457280
250-STARTTLS
250-AUTH PLAIN LOGIN
250 AUTH=PLAIN LOGIN

トラブルシューティング

エラーに遭遇するのは避けたいところですが、原因がわかれば比較的簡単に対処できます。

  • エラー「Must issue a STARTTLS command first」
    クライアントが、暗号化通信を確立するよりも前に認証を試みています。
    対処法:
    クライアントの設定でSTARTTLSを有効にしてください。また、正しいポート(通常は587番)を使用しているか確認してください。
  • エラー「STARTTLS is required」
    接続先のサーバでは暗号化が必須ですが、クライアントが暗号化を要求していません。
    対処法:
    SMTP設定で、SSL/TLSだけでなくSTARTTLSも有効にしてください。
  • 接続タイムアウトまたは接続拒否(Connection timed out、Connection refusedなど)
    使用しているSMTPポートがISPによってブロックされている可能性があります。特に25番ポートで接続に失敗する場合は、ISPによるブロックが原因だと考えられます。
    対処法:
    他のポート(587番、2525番、465番)を使用してください。
  • 証明書の検証失敗(Certificate verification failedなど)
    サーバのTLS証明書を検証できませんでした。
    対処法:
    使用している端末の日時設定が正しいか、また、サーバのホスト名がクライアント側のSMTP設定と完全に一致しているか確認してください。
  • ネゴシエーション失敗(Negotiation failedなど)
    クライアントとサーバの間で、利用できるTLSのバージョンが一致していません。
    対処法:
    サーバが対応しているTLSのバージョンを確認し、クライアントを更新してください。古いクライアントでは、既に非推奨(deprecated)となっているバージョンにしか対応していない場合があります。

エラーに対処する際は、以下の順序で確認するのがおすすめです。

  1. TelnetでSTARTTLS接続を行い、サーバがSTARTTLSに対応していることを確認する(上述の「STARTTLSの対応状況を確認する方法」を参照)
  2. SMTPサーバのアドレスとポートの組み合わせが正しいことを確認する
  3. ファイアウォールやウイルス対策ソフトがSMTP接続に影響していないか確認する
  4. 接続先のポートがSTARTTLSをサポートしているか確認する

上記を試しても問題が解決しない場合、クライアントの設定に問題がある可能性があります。認証方法やポート番号が正しいかを確認し、SSL/TLSだけでなくSTARTTLSが明示的に有効になっていることを確認してください。

SendGridにおけるSTARTTLSの利用

SendGridはTLS 1.2以上をサポートしています。非暗号化およびTLS接続はポート25、587、2525で受け付けています。465番ポートでのSSL接続も可能です。

また、日和見TLSや強制TLSにも対応しています。日和見TLSでは、宛先サーバが対応している中で最も高い暗号化レベルでメールを送信します。強制TLSでは、宛先サーバが暗号化通信を受け付けない場合はメッセージは破棄され、Blockイベントが発生します。

お客様がSTARTTLSを使用するのは、主にSendGridに対してSMTP接続を行うタイミングです。SendGridから宛先サーバへの送信時における、TLS証明書の検証や暗号化プロセス、その他の問題の処理は、SendGridが行います。

SendGridおよびSMTPの詳細については、ドキュメント「SMTPでメール送信する」をご覧ください。

よくある質問

Q:STARTTLSはどのポートを使用しますか?

STARTTLSでは通常587番ポートを使用します。これは暗号化されたメール送信における標準的なポートです。25番、2525番もSTARTTLSに対応していますが、クライアントアプリケーションでは587番を使用することが推奨されます。

Q:STARTTLSは安全ですか?

STARTTLSは、適切に設定されていれば強固なセキュリティを提供しますが、リスクがないわけではありません。通信開始直後の暗号化されていないハンドシェイクの段階では、中間者攻撃を受ける可能性があります。最大限のセキュリティを確保するには、証明書の検証を有効にしたSTARTTLSを使用してください。

Q:どうすればSTARTTLSを有効にできますか?

クライアントのSMTP設定でSTARTTLSを有効にしてください。例えば「STARTTLSを使用する」、「明示的TLS」、「TLS/STARTTLS」といった項目を選択します(「SSL」や「暗黙的TLS」ではありません)。

Q:STARTTLSとSSLの違いは何ですか?

STARTTLSは既存の接続を暗号化通信に切り替えるのに対し、SSLは初めから暗号化接続を行います。STARTTLSは1つのポートで暗号化通信と非暗号化通信の両方に対応できるため、より柔軟性があります。

Q:「StartTLS is required」のエラーが発生します。どうしたら解消できますか?

これは、接続先のサーバでは暗号化通信が必須になっているにもかかわらず、クライアント側でSTARTTLSが有効になっていない場合に発生します。クライアントのSMTP設定でSTARTTLSが有効になっていること、また、送信ポートに587番を使用していることを確認してください。

Q:全てのメールプロバイダがSTARTTLSに対応していますか?

ほとんどのメールプロバイダはSTARTTLSに対応していますが、古いプロバイダやセキュリティレベルの低いプロバイダでは対応していない場合があります。まずはTelnetで接続し、STARTTLSの対応状況を確認してください。もしSTARTTLSに対応していなければ、プロバイダの変更も検討しましょう。

アーカイブ

  • クレジットカード
    登録不要

  • インストールは
    一切不要

  • 独自ドメイン
    利用OK

SendGridの充実した機能をまずは
試してみませんか?

無料トライアル