T.R*_*Rob 2 openssl batch-file gnuwin32 ibm-mq
我试图使用OpenSSL的GnuWin32版本从几个WebSphere MQ队列管理器中获取证书。所有尝试都会导致OpenSSL保持连接打开,直到我手动按ENTER键为止。
我尝试按照这个SO问题和这个SO问题将各种文本传送到命令中,但是没有运气。
理想情况下,一旦输入文件或管道文本到达EOF,OpenSSL将关闭连接。
例子:
echo QUIT | openssl s_client -connect qmgrhost:1414 -showcerts
openssl s_client -connect qmgrhost:1414 -showcerts < responsefile.txt
Run Code Online (Sandbox Code Playgroud)
使用QUIT
命令的示例似乎在另一个SO问题中也可以使用,因为它们正在命中HTTP服务器。因为在我的情况下这是WMQ,所以连接握手是不同的,发送QUIT
(或我尝试过的其他任何操作)不能使它关闭连接。在QMgr阻塞并终止连接之前,我可能会向其提供一个巨大的文件,但我正在尝试对服务器尽可能礼貌。从键盘提供ENTER的当前方法是按原样在每个连接上引起FDC转储,引发各种警报并使Tivoli伙计们生我的气。
因此,最好的情况是QMgr将该字符串或十六进制值解释为正常拒绝并关闭连接。第二好的情况是任何允许对此脚本编写脚本的方法,我们将接受FDC文件作为自动执行此功能的代价。
更新:2013年5月31日,
我此后搬到了AIX,它在这里非常有效。在脚本中运行并在其中插入换行符后,建立连接后,s_client立即挂断。但是,我仍然希望有Windows的解决方案。有人知道Cygwin版本是否有效或存在相同问题吗?Windows信令/ POSIX问题吗?代码错误?
似乎此问题与批处理文件和openssl.exe程序之间的同步问题有关。我需要您的协作才能进行一些测试并报告结果。下面是第一个测试的Batch-JScript混合脚本。JScript部分包含两个部分;第一个WScript.Stdout.WriteLine("QUIT");
完全等同于echo QUIT
Batch命令。第二部分(两行)相似,但是它向键盘缓冲区加载了“ QUIT”和Enter键,而不是通过STDOUT发送字符串。
我需要您对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}");
Run Code Online (Sandbox Code Playgroud)
您也可以尝试通过或方法String.fromCharCode(26)
生成Ctrl-Z(EOF)字符;例如:WriteLine
Sendkeys
WshShell.SendKeys("QUIT{ENTER}" + String.fromCharCode(26));
Run Code Online (Sandbox Code Playgroud)