STARTTLS ゲートウェイとしての StreamRelay.NET.exe
STARTTLS ゲートウェイとしての StreamRelay.NET.exe (StartTLS サーバ)
StreamRelay.NET.exe -LocalPort 25 -RemotePort 192.0.2.3 -RemotePort 25 -LocalProxy "starttls://?command=STARTTLS^&SuccessMessage=200 Go ahead"
とすると、サーバ側の STARTTLS 機能の代理をする事ができる。
STARTTLS ゲートウェイとしての StreamRelay.NET.exe (StartTLS クライアント)
StreamRelay.NET.exe -LocalPort 90 -RemotePort 192.0.2.2 -RemotePort 25 -RemoteProxy starttls://?command=STARTTLS^&SuccessMessage=200
とすると、STARTTLSクライアントとなり、開始コマンドをまちつつ、TLS 開始時にはSSLクライアントになれる。
こうすれば、nc.exe(netcat)で、(StreamRelay.NET.exe経由で)StartTLSサーバに接続して、デバグできるよ。
てか「-LocalPort 90」を「-LocalPort 0」にすれば、StreamRelay.NET.exe がキーボード/コンソールの送受信を担当できるので、netcat 必要ないけどね。
オプション
SSLProxy と同じオプションに加えて、開始コマンドを示す「command」と成功時の応答メッセージ、または成功時の応答メッセージの一部を示す「SuccessMessage」
方向を逆転させる
- Server と Client
- 既定では、TCPのハンドシェイクの方向と、SSLのハンドシェイクの方向は同じだが、SSLプロキシの設定と同じように、反対にすることができる
- StartTLSServer と StartTLSClient
- 既定では、TCPのハンドシェイクの方向と、StartTLS のハンドシェイクの方向は同じだが、SSLプロキシの設定と同じように、反対にすることができる
つまり、TCP(通信) の方向と、SSL の方向、StartTLS の方向(StartTLSサーバとクライアントの位置関係)は、設定によって、自由にできます
本家の該当箇所
STARTTLSクライアントにもなる
「StartTLSClientNoDelay」オプションを使う事で、接続後にStreamRelay.NET.exe自身が STARTTLSクライアントとなって、SSL接続を開始させられる。
StreamRelay.NET.exe -LocalPort 90 -RemotePort 192.0.2.2 -RemotePort 25 -RemoteProxy "starttls://?command=STARTTLS&SuccessMessage=200 2.0.0&StartTLSClientNoDelay"
という感じ。
「SuccessMessage」を「200」ではなくて「200 2.0.0」とより具体的に書いているのは、SMTPサーバのHELLOメッセージと混同する事を避けるためです。
(そして、半角スペースがあるので、ハット(^)を取ってダブルクォート(")で囲んだ)
つまり「200」だけだと、
1.接続
2.STARTTLS開始のコマンド「STARTTLS」を送信
3.接続先/相手(SMTPServer)の Helloメッセージ(200 OKとか)が返る
4.ここで、成功と判断してSSLハンドシェイク開始
5.2.の「STARTTLSいいよ」メッセージが SSLハンドシェイク中に返る
6.SSLハンドシェイクエラー
となってしまうので、「200 2.0.0」とすることで
1.接続
2.STARTTLS開始のコマンド「STARTTLS」を送信
3.接続先/相手(SMTPServer)の Helloメッセージ(200 OKとか)が返る
4.ここではまだ、成功と判断しない
5.2.の「STARTTLSいいよ」メッセージ(200 2.0.0)が返る
6.SSLハンドシェイク開始
となって、接続直後に StartTLS 接続を成功させることができる
SMTP認証と兼ねる
StreamRelay.NET.exe は SMTP 認証も兼ねる事ができるよ。
SMTP認証を代替するStreamRelay.NET.exe