2016-08-23 3 views
4

저는 QuickFIX/J를 사용하여 Bloomberg Server에 연결하는 애플리케이션을 작성했습니다. 최근 Bloomberg는 CA 인증서 유효성 검사를 서버에 추가했으며 핸드 셰이크를 위해 추가 CA 인증서 파일을 제공합니다.QuickFIX/J CA 인증서 유효성 확인

내 응용 프로그램이 SSL을 사용하여 연결되었으며 Bloomberg 측에서 CA 인증서 유효성 검사를 사용하지 않도록 설정하면 응용 프로그램이 서버에 성공적으로 연결되어 메시지를 가져옵니다. CA 유효성 검사를 사용할 때 핸드 셰이크가 실패했습니다.

다음은 내가 시도한 단계입니다.

  1. 이전에 나는 ImportKey 자바 클래스를 사용하여 인증서와 키를 추가했습니다. 여러 인증서를 추가하도록 변경했습니다. 필요한 경우 Java 클래스 을 게시 할 수 있습니다.
  2. openssl s_client를 사용하여 서버에 연결할 때 서버에 성공적으로 연결됩니다.

응용 프로그램 수준에서 변경해야 할 사항이 있습니까? 구성? 아니면 Java 키 저장소 수준에서 수행 할 작업이 있습니까? 아래에 추가 연결할 때

오류 메시지가 온다 :

20160823-06 : 04 : 15 FIX.4.4 : XXXX-> XXXX, 오류> (분리 : 소켓 예외 (/XXXX.XXXX합니다. XXX.XX : 20237) : javax.net.ssl.SSLHandshakeException :. SSL 핸드 셰이크가 실패) 성공적으로 sessionId가에 대한 로그 아웃 : FIX.4.4 : XXXX-> XXXX

어떤 도움

을 감사합니다!


구성 :

[default] 
# Settings which apply to all the Sessions. 

ConnectionType=initiator 
LogonTimeout=86400 
ResetOnLogon=Y 
UseDataDictionary=Y 
MaxLatency=240 

#StartTime=00:00:00 
#EndTime=00:00:00 

#StartTime=02:30:00 
#EndTime=12:30:00 

StartTime=02:21:00 
EndTime=12:21:00 

HeartBtInt=30 
ReconnectInterval=5 

[session] 
# Settings specifically for one session 
BeginString=FIX.4.4 
SocketConnectHost=xxx.xxx.xxx.xxx 
SocketUseSSL=Y 
SocketKeyStorePassword=importkey 
CheckLatency=N 

#SendResetSeqNumFlag=Y 

# new setups 

FileLogHeartbeats=Y 
##----- CAPS Configuration ---------## 

FileStorePath=/etc/bloomburg-live/msgs 
FileLogPath=/etc/bloomburg-live/logs 
DataDictionary=/etc/bloomburg-live/conf/FIX44.xml 
SocketKeyStore=/root/.keystore 
TargetCompID=BLPSTP 
SocketConnectPort=xxxxx 
SenderCompID=CAPSTP 

# log configuration 

FileIncludeMilliseconds=Y 
FileIncludeTimeStampForMessages=Y 
ScreenLogShowHeartBeats=Y  
#Filter heartbeats from output (both incoming and outgoing) 

PS - CA 인증서 유효성 검사없이 응용 프로그램 작동합니다. CA 인증서 유효성 검사를 활성화하면 오류가 발생합니다.

+0

Downvote? 그게 왜? – ambarox

+0

아마도 인증서를 처리하는 코드 조각을 보여 주어야합니다. –

+0

코드 단편 구성 만 있습니다. ca 인증서를 처리 할 구성이 없습니다. – ambarox

답변

3

예, 이전에 응용 프로그램이 ssl로 작업 한 경우. 애플리케이션 측에서 어떤 변경도 할 필요가 없다. 일반적으로 Quickfix/j는 java와 마찬가지로 ssl 유효성 검사를 처리합니다. 즉, openssl을 의미하고 java keytool이 당신을 위해 속임수를 쓸 것입니다. 그래서 단계는 아래에 나열되어 있습니다.

  1. 신뢰 인증서, 개인 키 및 ca 인증서를 사용하여 pkcs12 키 저장소를 만듭니다.
$ openssl pkcs12 -export -chain -in certificate.pem -inkey encodedKey.pem -out keystore.p12 -name importkey -CAfile CAcertificate.pem 

수출 비밀번호 입력 : importkey 를 확인 - 수출 비밀번호 입력 : importkey를

키 도구를 사용하여
  • , 그 결과 키 스토어에 PKCS12 키 저장소를 가져
      /root/.keystore라는 quickfix/j에서 사용합니다. 다시 한 번, 다른 암호를 선택할 수 있습니다.
    keytool -importkeystore -destkeystore /root/.keystore -srckeystore keystore.p12 -alias importkey 
    Enter destination keystore password: importkey 
    Re-enter new password: importkey 
    Enter source keystore password: importkey 
    
    1. 변경 구성 파일 및 클래스 경로에 키 스토어를 복사합니다. 그것은
    SocketKeyStore=keystore.ImportKey 
    cp /root/.keystore keystore.ImportKey /your/classpath 
    

    이잖아. quickfix/j는 자체 키 저장소를 유지 관리하므로 java 키 저장소에 ssl 키와 인증서를 추가하는 것이 quickfix/j에서 작동하지 않습니다. 따라서 키 추가 프로세스 이후에 키 저장소를 클래스 경로에 추가해야합니다.

    참고 -

  • +0

    cp /root/.keystore 정확히 어디에서 복사합니까? – fiddle

    +0

    클래스 경로로 복사해야합니다. 나는 답을 편집 할 것입니다. 언급에 감사드립니다. – ambarox

    +0

    혼란 스럽네요. 나는이'/ root/.keystore'가 어디에 있는지 전혀 모릅니다. 나는 Win OS btw를 사용 중이다. 또한 테스트를 위해 FIX 프로그램을 설치 한 곳을보고 있다면'root '하위 디렉토리가 보이지 않습니다. 이 단계는 * nix 시스템을위한 것입니까? 추신 : 나는 또한 내가 블룸버그에 연결할 상황에있다. 사용중인 QuickFIX/J의 버전은 무엇입니까? 1.5.3? 1.6.x? –