2013-05-29 6 views
2

GnuWin32 버전의 OpenSSL을 사용하여 여러 WebSphere MQ 대기열 관리자에서 인증서를 가져 오려고합니다. 모든 시도는 OpenSSL에서 수동으로 ENTER를 누르기 전까지 연결을 유지합니다.GnuWin32 openssl s_client conn가 WebSphere MQ 서버에 연결되지 않고 EOF에서 닫히지 않음

다양한 텍스트를 as per this SO questionthis SO question 명령으로 파이핑하려고했지만 행운이 없었습니다.

이상적으로 OpenSSL은 입력 파일이나 파이프 된 텍스트가 EOF에 도달하면 연결을 닫습니다.

예 :

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 진수 값이되고 우아한 거부로 해석하고 연결을 닫습니다. 두 번째로 가장 좋은 경우는 방법으로 스크립팅이 가능하며이 기능을 자동화하는 비용으로 FDC 파일을 사용합니다.

2013 년 5 월 31 일
나는 완벽하게 작동하는 AIX로 옮겼습니다. s_client는 스크립트에서 실행될 때 연결을 만든 후 줄 바꿈을 파이프하는 즉시 끊습니다. 그러나 나는 여전히 Windows 용 솔루션을 원합니다. 누구든지 Cygwin 버전이 작동하는지 또는 동일한 문제가 있는지 알고 있습니까? Windows 신호/POSIX 문제입니까? 코드 버그?

답변

4

이 문제는 일괄 처리 파일과 openssl.exe 프로그램 간의 동기화 문제와 관련이있는 것으로 보입니다. 몇 가지 테스트를하고 그 결과를보고하기 위해서는 귀하의 협력이 필요합니다. 아래는 첫 번째 테스트를위한 Batch-JScript 혼합 스크립트입니다. JScript 섹션에는 두 부분이 있습니다. 첫 번째는 WScript.Stdout.WriteLine("QUIT");echo QUIT 일괄 처리 명령과 완전히 동일합니다. 두 번째 부분 (두 줄 포함)은 비슷하지만 STDOUT을 통해 문자열을 보내는 대신 "QUIT"및 Enter 키를 사용하여 키보드 버퍼를로드합니다.

JScript 코드의 두 섹션으로 테스트를 수행하고 결과를보고해야합니다 (이중 슬래시 //은 나머지 줄을 주석으로 표시). 운이 좋다면 openssl.exe 프로그램은 Sendkeys 메소드로 끝납니다. 그렇지 않다면 STDOUT을 통해 "QUIT"문자열을 보내고 Sendkeys과 함께 Enter 키만 입력하십시오. openssl.exe 프로그램이 원하는 정보를 반환하기 전에 종료되면 문제가 거의 해결됩니다.이 경우 openssl.exe에서 원하는 정보가 수신 될 때까지 Enter 키 전송을 동기화 할 수 있기 때문에 문제가 거의 해결됩니다.

다음을 .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}"); 

또한 모두 WriteLine 또는 Sendkeys 방법에서는, Ctrl 키-Z (EOF) 문자를 생성하는 String.fromCharCode(26)으로 시도 할 수 있습니다;

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)을 발견하고 방금 실행했습니다. 박쥐 파일로. 이런! 어쨌든 SendKeys로'\ n'을 보내면 스크립트가 차단 해제됩니다. 감사! –

+0

@ T.Rob : 고마워요! 불분명 한 지시에 사과드립니다. (이 파일은 일괄 .bat 파일입니다.) – Aacini

+0

문제 없습니다. 오늘 어쨌든 내 쿼터를 맞추려면 뭔가를 배워야했습니다. ;-) 나는이 기술에 대해 솔직히 알지 못했지만 지금부터 많이 사용하게 될 것임을 알 수있다. –