STARTTLSとは?SMTP暗号化の仕組み

STARTTLSとは

STARTTLSの仕組みとSMTP暗号化の流れを理解しよう

現在のメールシステムにおいて、SMTP通信の暗号化は必須のセキュリティ対策となっています。

メール送信時にユーザー名やパスワード、メール本文を保護するため、多くのSMTPサーバではTLS暗号化が利用されています。

その中でも現在最も広く利用されている方式がSTARTTLSです。

Gmail、Microsoft 365、レンタルサーバ、企業メールサーバなど、多くの環境で採用されています。

本記事ではSTARTTLSの仕組みやSMTP over SSL/TLSとの違い、実際の通信の流れについて解説します。

STARTTLSとは

STARTTLSとは、SMTP通信の途中でTLS暗号化へ切り替える仕組みです。

SMTPクライアントは最初に通常のSMTP接続を行い、その後STARTTLSコマンドを送信して暗号化通信を開始します。

現在のメール送信では標準的な方式として利用されています。

なぜSTARTTLSが必要なのか

SMTPはもともと暗号化を前提として設計されていませんでした。

そのため、暗号化なしでは通信内容を盗聴される危険があります。

例えば以下の情報が第三者に見られる可能性があります。

  • 送信者メールアドレス
  • 宛先メールアドレス
  • メール本文
  • SMTP認証情報
  • 添付ファイル情報

STARTTLSはこれらの情報を保護するために利用されます。

STARTTLSの通信イメージ

通信の流れは次のようになります。

メールソフト
     ↓
SMTP接続
     ↓
EHLO
     ↓
STARTTLS
     ↓
TLS暗号化開始
     ↓
SMTP認証
     ↓
メール送信

途中から暗号化通信へ切り替わることが特徴です。

SMTP over SSL/TLSとの違い

よく比較されるのがSMTP over SSL/TLSです。

項目STARTTLSSMTP over SSL/TLS
利用ポート587465
接続開始時平文暗号化
暗号化開始STARTTLS実行後接続直後
現在の利用状況主流利用継続中

現在は587番ポートのSTARTTLSが推奨されることが多くなっています。

利用されるポート番号

STARTTLSでは主に587番ポートを利用します。

ポート用途
25SMTP配送
465SMTP over SSL/TLS
587Submission(STARTTLS)

メールクライアントからの送信では587番ポートが一般的です。

EHLOコマンドとは

SMTP接続後、クライアントはEHLOコマンドを送信します。

EHLO client.example.com

SMTPサーバは利用可能な機能一覧を返します。

その中にSTARTTLSが含まれている場合、TLS暗号化へ移行できます。

STARTTLS対応サーバの応答例

SMTPサーバの応答例です。

250-mail.example.com

250-PIPELINING

250-SIZE 52428800

250-STARTTLS

250 AUTH LOGIN PLAIN

250-STARTTLSが表示されればTLS通信が利用可能です。

STARTTLSコマンドの実行

クライアントは以下のコマンドを送信します。

STARTTLS

サーバは次のように応答します。

220 Ready to start TLS

ここからTLSハンドシェイクが開始されます。

TLSハンドシェイクとは

TLS通信を開始するための事前処理です。

主な処理は以下の通りです。

  • サーバ証明書確認
  • 公開鍵交換
  • 暗号方式決定
  • 共通鍵生成

この処理が完了すると暗号化通信が開始されます。

暗号化後のSMTP通信

TLSハンドシェイク完了後は全てのSMTP通信が暗号化されます。

AUTH LOGIN

MAIL FROM

RCPT TO

DATA

認証情報やメール本文も保護されます。

SMTP認証との関係

SMTP-AUTHを利用する場合はSTARTTLSとの組み合わせが推奨されます。

例えば以下のような構成です。

SMTP-AUTH

+

STARTTLS

認証情報を安全に送信できます。

PostfixでSTARTTLSを有効にする

Postfixではmain.cfへ以下を設定します。

smtpd_use_tls = yes

証明書を指定します。

smtpd_tls_cert_file =
/etc/pki/tls/certs/server.crt

秘密鍵を指定します。

smtpd_tls_key_file =
/etc/pki/tls/private/server.key

587番ポートを有効にする

master.cfでSubmissionサービスを有効化します。

submission inet n - n - - smtpd

さらに以下を設定します。

-o smtpd_tls_security_level=encrypt

-o smtpd_sasl_auth_enable=yes

これでSTARTTLSが利用可能になります。

動作確認方法

telnetでSMTP接続します。

telnet localhost 587

EHLOを実行します。

EHLO localhost

以下が表示されれば成功です。

250-STARTTLS

opensslによる確認

TLS接続確認にはopensslが便利です。

openssl s_client -starttls smtp \
-connect mail.example.com:587

証明書情報やTLS状態を確認できます。

よくあるエラー

STARTTLS not supported

STARTTLS not supported

SMTPサーバ側でSTARTTLSが有効になっていません。

Certificate verify failed

Certificate verify failed

証明書の有効期限やホスト名を確認します。

TLS handshake failed

TLS handshake failed

TLSバージョンや証明書設定を確認します。

STARTTLSのメリット

  • 通信盗聴防止
  • SMTP認証情報保護
  • メール本文保護
  • 標準的な運用方式
  • 多くのメールソフトが対応

現在のメール送信環境では必須の技術です。

STARTTLSの注意点

STARTTLSは接続後に暗号化へ移行する方式です。

そのためTLS利用を必須化する設定も重要です。

Postfixでは以下が利用できます。

smtpd_tls_security_level = encrypt

暗号化されていない接続を拒否できます。

実務での利用例

STARTTLSは以下のような環境で利用されています。

  • Gmail
  • Microsoft 365
  • 企業メールサーバ
  • レンタルサーバ
  • クラウドメールサービス

事実上の標準方式となっています。

まとめ

STARTTLSはSMTP通信を途中からTLS暗号化へ切り替える仕組みです。

現在では587番ポートを利用したSTARTTLSがメール送信の標準的な方式となっています。

SMTP-AUTHと組み合わせることで認証情報やメール本文を安全に送信できます。

メールサーバを安全に運用するためには、STARTTLSを有効化し、暗号化通信を必須にすることが重要です。