14

通常 (暗号化なしで) SMTP サーバーに接続し、STARTTLS コマンドを送信し、SSL 暗号化をネゴシエートしてから、暗号化されたセッションと対話するために openssl を使用しています。

これは私が使用しているコマンドです(telnet経由):

openssl s_client -starttls smtp -crlf -connect 1.2.3.4:25

TLS ハンドシェイクが成功したことを確認するにはどうすればよいですか?

これまでに使用した一連のコマンドは次のとおりです。

<< 220 example.com ESMTP ready
>> EHLO localhost
<< 250-smtp.mail.yahoo.com
<< 250-PIPELINING
<< 250-AUTH PLAIN LOGIN CRAM-MD5
<< 250 STARTTLS
>> STARTTLS
<< 220 2.0.0 Start TLS
>> openssl s_client -starttls smtp -crlf -connect 127.0.0.1:587    
4

1 に答える 1

26

telnetシェル (やなどのコマンドを入力する場所openssl) とソケットのプロトコルを混同しているようです。

SMTP のようなプロトコルのポートに接続するために telnet を使用することは、そのプロトコルのクライアントを実装する場合に通常プログラムしなければならないことを直接入力できる簡単なハックです。テキストベースのプロトコルでは多少は機能しますが、制限があります。特に、この方法で TLS ハンドシェークを入力するのは困難です。まず、送信する必要のあるバイトの一部に対して、キーボードで適切なキーを見つけることができないでしょう。第二に、サーバーが送信するものを確実に読み取ることができなくなります。要するに、このアプローチは意味がありません。

openssl s_client -starttls smtp -crlf -connect 127.0.0.1:587telnet でやろうとしていることは既に実行されています。そのサーバーへの接続を開き、EHLOSMTP コマンドを送信し、SMTP コマンドを送信してSTARTTLSから、ハンドシェイクを開始します。OpenSSL コマンド自体は SMTP プロトコルの一部ではなく、SMTP ソケットで送信してはなりません。このコマンドを実行すると、telnet と同じ方法で標準入力/出力を使用できるため、ハンドシェイクが既に実行されている telnet セッションと同様の結果が得られます。

そうは言ってもtelnet、 とopenssl s_clientSMTP コマンドを送信することはせいぜいデバッグ手法です。

于 2013-02-01T12:00:21.447 に答える