2013-05-29 25 views
2

我想使用OpenSSL的GnuWin32版本從多個WebSphere MQ隊列管理器中獲取證書。所有嘗試都會導致OpenSSL保持連接處於打開狀態,直到我手動按Enter鍵。GnuWin32 openssl s_client conn到WebSphere MQ服務器不在EOF處關閉,掛起

我試着將各種文本輸入命令as per this SO questionthis SO question,但沒有運氣。

理想情況下,一旦輸入文件或管道文本命中EOF,OpenSSL將關閉連接。

實例:

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

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

使用QUIT命令的實施例出現在其他SO問題的工作,因爲它們被擊中的HTTP服務器。由於這是我的WMQ,連接握手是不同的,併發送QUIT(或其他我試過的)不會讓它關閉連接。我可能會餵它一個巨大的文件,直到QMgr窒息並殺死連接,但我試圖儘可能禮貌地服務器。當前從鍵盤提供回車的方法是在每個連接上導致FDC轉儲,引發所有類型的警報,並讓Tivoli人員對我發火。

所以最好的情況應該是QMgr解釋爲優雅拒絕並關閉連接的字符串或十六進制值。第二種最好的情況是任何方法,它允許這個腳本,我們將接受FDC文件作爲自動執行此功能的代價。

更新:2013年5月31日
我已經轉移到AIX,這完美地工作。在腳本中運行連接後,s_client立即掛起,並在其中輸入換行符。不過,我仍然想要爲Windows提供解決方案。有誰知道Cygwin的版本是否工作或有相同的問題?它是Windows信令/ POSIX問題?代碼錯誤?

回答

4

看來這個問題與批處理文件和openssl.exe程序之間的同步問題有關。我需要您的協作才能做一些測試並報告結果。下面是第一個測試的Batch-JScript混合腳本。 JScript部分有兩部分;第一個WScript.Stdout.WriteLine("QUIT");完全等價於echo QUIT批處理命令。第二部分(有兩行)是相似的,但它使用「QUIT」和一個Enter鍵加載鍵盤緩衝區,而不是通過STDOUT發送字符串。

我需要你使用JScript代碼的兩個部分進行測試並報告結果(雙斜槓//將該行的其餘部分標記爲註釋)。如果幸運的話,openssl.exe程序將以Sendkeys方法結束;如果沒有,請嘗試通過STDOUT發送一個「QUIT」字符串,然後輸入一個帶有Sendkeys的Enter鍵。如果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)); 
+1

花了我幾天的閱讀來確定如何運行我的第一個JScript腳本。最終我發現[這篇博文](http://blogs.msdn.com/b/joshpoley/archive/2008/01/15/running-jscript-in-a-cmd-file.aspx),並意識到我只是運行它作爲一個bat文件。咄!無論如何,用SendKeys發送'\ n'會解鎖腳本。謝謝! –

+0

@ T.Rob:非常感謝!我對不清楚的說明表示歉意(我以爲你知道這是一個批處理.bat文件)... – Aacini

+0

沒問題。無論如何,我今天需要學習一些東西來滿足我的配額。 ;-)我真的不知道這種技術,但我可以看到我將從現在開始使用它,所以它非常值得賞金。 –