POP3 / IMAP / SMTP の「TLS(即TLS)」と「STARTTLS」接続コマンドをまとめます。
接続後のコマンド:
メール関連コマンド
基本ルール(超重要)
-
STARTTLS系 →
-starttls <protocol> -
即TLS系(xxxS) →
-starttls不要 -
本文取得・DATA・FETCH・RETR →
-quiet推奨 -
SMTP / POP3 / IMAP →
-crlfLinuxでは必須 -
今どき →
-servernameほぼ必須(SNI)
書式
STARTTLS系(SMTP/POP3/IMAP)
■Powershell
openssl s_client -starttls $protcol -connect $host:$port -quiet -servername $host
■Bash
openssl s_client -starttls $protcol -connect $host:$port -crlf -quiet -servername $host
即TLS系(SMTP/POP3/IMAP)
■Powershell
openssl s_client -connect $host:$port -quiet -servername $host
■Bash
openssl s_client -connect $host:$port -crlf -quiet -servername $host
例
SMTP(STARTTLS)
587 / 25
openssl s_client -starttls smtp \
-connect smtp.example.com:587 \
-crlf -quiet \
-servername smtp.example.com
SMTPS(即TLS)
465
openssl s_client \
-connect smtp.example.com:465 \
-crlf -quiet \
-servername smtp.example.com
IMAP(STARTTLS)
143
openssl s_client -starttls imap \
-connect imap.example.com:143 \
-crlf -quiet \
-servername imap.example.com
IMAPS(即TLS)
993
openssl s_client \
-connect imap.example.com:993 \
-crlf -quiet \
-servername imap.example.com
POP3(STARTTLS)
110
openssl s_client -starttls pop3 \
-connect pop3.example.com:110 \
-crlf -quiet \
-servername pop3.example.com
POP3S(即TLS)
995
openssl s_client \
-connect pop3.example.com:995 \
-crlf -quiet \
-servername pop3.example.com
一覧まとめ(完全版)
| プロトコル | 方式 | ポート | openssl オプション |
|---|---|---|---|
| SMTP | STARTTLS | 587 / 25 | -starttls smtp |
| SMTP | TLS | 465 | なし |
| IMAP | STARTTLS | 143 | -starttls imap |
| IMAP | TLS | 993 | なし |
| POP3 | STARTTLS | 110 | -starttls pop3 |
| POP3 | TLS | 995 | なし |
【openssl s_client よく使うオプション一覧】
基本系(ほぼ毎回使う)
-connect host:port
接続先を指定
-connect smtp.example.com:587
- TCPで接続する先
- これがないと始まらない
-starttls smtp | imap | pop3
STARTTLS を自動実行
-starttls smtp
- 平文接続 → STARTTLS → TLS昇格
- 587 / 143 / 110 では必須
- 465 / 993 / 995 では 使わない
-crlf
改行を CRLF にする
-crlf
- Linuxでは必須
- ないとコマンドが認識されないことがある
-servername hostname
SNI(Server Name Indication)を指定
-servername smtp.example.com
- TLS ClientHello にホスト名を含める
- 仮想ホスト・Let’s Encrypt 環境で重要
- 証明書不一致トラブル回避
実務で超重要
-quiet
OpenSSL の内部ログを抑制
-quiet
- サーバからのデータだけ表示
-
DATA/RETR/FETCH時に必須 - ないと本文が壊れて見える
-showcerts
証明書チェーンをすべて表示
-showcerts
- 中間証明書欠落チェック
- MTA / MUA の証明書検証エラー切り分け
-verify_return_error
証明書検証失敗をエラーにする
-verify_return_error
- 検証NGなら即失敗
- 本番相当の厳しさでチェックしたい時
TLS バージョン・暗号系(調査用)
-tls1_2 / -tls1_3
TLSバージョンを固定
-tls1_2
- 古いクライアント互換性確認
- 「TLS1.2必須」などの設定検証
-cipher 'CIPHER_LIST'
使用する暗号スイートを限定
-cipher 'ECDHE-RSA-AES256-GCM-SHA384'
- セキュリティ要件検証
- 接続不可原因の切り分け
デバッグ・詳細表示
-state
TLS状態遷移を表示
-state
- ハンドシェイクで止まる位置確認
-msg
TLSメッセージ詳細表示
-msg
- ClientHello / ServerHello を生で見る
- 相当マニア向け
-debug
I/Oを16進ダンプ
-debug
- パケットレベル調査
- ほぼ最終手段
ほぼ使わないが知っておくと良い
-ign_eof
EOFを無視して入力継続
-ign_eof
- stdinが閉じてもセッション維持
- スクリプト連携時