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

目次
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です。
| 項目 | STARTTLS | SMTP over SSL/TLS |
|---|---|---|
| 利用ポート | 587 | 465 |
| 接続開始時 | 平文 | 暗号化 |
| 暗号化開始 | STARTTLS実行後 | 接続直後 |
| 現在の利用状況 | 主流 | 利用継続中 |
現在は587番ポートのSTARTTLSが推奨されることが多くなっています。
利用されるポート番号
STARTTLSでは主に587番ポートを利用します。
| ポート | 用途 |
|---|---|
| 25 | SMTP配送 |
| 465 | SMTP over SSL/TLS |
| 587 | Submission(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 PLAIN250-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を有効化し、暗号化通信を必須にすることが重要です。






