2

OpenSSL の GnuWin32 バージョンを使用して、いくつかの WebSphere MQ キュー マネージャーから証明書を取得しようとしています。すべての試行で、手動で ENTER を押すまで、OpenSSL が接続を開いたままにします。

this SO questionおよびthis SO question に従って、さまざまなテキストをコマンドにパイプしようとしましたが、うまくいきませんでした。

理想的には、入力ファイルまたはパイプされたテキストが EOF に達すると、OpenSSL は接続を閉じます。

例:

echo QUIT | openssl s_client -connect qmgrhost:1414 -showcerts 

openssl s_client -connect qmgrhost:1414 -showcerts < responsefile.txt

コマンドを使用した例QUITは、HTTP サーバーにアクセスしているため、他の SO の質問で機能しているように見えます。これは私の場合は WMQ であるため、接続ハンドシェイクが異なり、送信QUIT(または私が試したもの) を行っても接続を閉じることができません。QMgrが接続を窒息させて切断するまで、おそらく巨大なファイルをフィードできますが、サーバーに対してできるだけ礼儀正しくしようとしています。キーボードから ENTER を入力する現在の方法では、接続ごとに FDC ダンプがそのまま発生し、あらゆる種類のアラームが発生し、Tivoli の担当者が私を怒らせています。

したがって、最良のケースは、QMgr が適切な拒否として解釈し、接続を閉じる文字列または 16 進値です。2 番目に良いケースは、これをスクリプト化できる方法であり、この機能を自動化するコストとして FDC ファイルを受け入れます。

更新: 2013 年 5 月 31 日
以来、これが完全に機能する AIX に移動しました。s_client は、スクリプトで実行して改行をパイプすると、接続を確立した直後にハングアップします。ただし、Windows 用のソリューションが必要です。Cygwin バージョンが機能するか、同じ問題があるかどうかは誰にもわかりませんか? Windows シグナリング/POSIX の問題ですか? コードバグ?

4

1 に答える 1

5

この問題は、バッチ ファイルと openssl.exe プログラム間の同期の問題に関連しているようです。いくつかのテストを行い、結果を報告するには、あなたの協力が必要です. 以下は、最初のテスト用の Batch-JScript ハイブリッド スクリプトです。JScript セクションには 2 つの部分があります。最初のものはBatch コマンドWScript.Stdout.WriteLine("QUIT");と完全に同等です。echo QUIT2 番目の部分 (2 行) も同様ですが、STDOUT 経由で文字列を送信する代わりに、"QUIT" と Enter キーを使用してキーボード バッファーを読み込みます。

JScript コードの両方のセクションでテストを行い、結果を報告する必要があります (二重スラッシュ//は、行の残りの部分をコメントとしてマークします)。運が良ければ、openssl.exeプログラムはSendkeysメソッドで終了します。そうでない場合は、 を介して「QUIT」文字列を送信しSTDOUT、Enter キーのみを入力してみてくださいSendkeys。プログラムが目的の情報を返す前に終了した場合openssl.exe、問題はほとんど解決されます。この場合、目的の情報が から受信されるまで Enter キーの送信を同期できるためopenssl.exeです。

以下を.batファイルとして保存します。試してから、行をコメントアウトし、Wscript行のコメントを解除してから、もう一度試してくださいWshShell

@if (@CodeSection == @Batch) @then

:: The first line above is...
:: in Batch: a valid IF command that does nothing.
:: in JScript: a conditional compilation IF statemente that is false,
::             so this section is omitted until next "at-sign end".

@echo off
CScript //nologo //E:JScript "%~F0" | openssl s_client -connect qmgrhost:1414 -showcerts 
goto :EOF


@end


// JScript section

WScript.Stdout.WriteLine("QUIT");

// var WshShell = WScript.CreateObject("WScript.Shell");
// WshShell.SendKeys("QUIT{ENTER}");

またはメソッドString.fromCharCode(26)の両方で Ctrl-Z (EOF) 文字の生成を試みることもできます。例えば:WriteLineSendkeys

WshShell.SendKeys("QUIT{ENTER}" + String.fromCharCode(26));
于 2013-06-01T04:17:38.143 に答える