2017-02-09 3 views
0

私はquickfixを使用してサーバーの証明書を検証し、致命的なhandshake_failureを取得しています。自己署名証明書の検証に関する問題:handshake_failureが受信されました

これは私にどのように見えるかです:

  • 最初のハンドシェイクが

    クライアントが接続
  • を開始しています。

  • サーバーが受け入れます。

  • A TLSハンドシェイクが、その間に発生:暗号スイートO

    が正常にネゴシエートされます。サーバーが任意にソケットを閉じoをクライアントO

    は、サーバ証明書

    を検証(TLSv1の警告を送信:警告は、説明=は、close_notify < - これは、しかし、クリーンな閉鎖のように見えます)。

    Oクライアントは吊ったままです

誰かがそれを見て回ることができます。お願いします。

Allow unsafe renegotiation: false 
Allow legacy hello messages: true 
Is initial handshake: true 
Is secure renegotiation: false 
Ignoring disabled protocol: SSLv3 
%% No cached client session 
.. 
.. 
*** ClientHello, TLSv1 
RandomCookie: GMT: 1468991703 bytes = { 167, 140, 147, 81, 176, 169, 230, 45, 229, 147, 246, 106, 201, 127, 79, 194, 88, 63, 1, 91, 34, 184, 35, 49, 119, 31, 227, 157 } 
.. 
.. 
ISocketConnector-0, WRITE: TLSv1 Handshake, length = 149 
MINA session created for FIX.4.4:ZZZZZ->YYYY: local=/X.X.X.X:XXXXXX, class org.apache.mina.transport.socket.nio.SocketSessionImpl, remote=/XXX.XXX.XXX.XX:YYYYY [quickfix.mina.initiator.InitiatorIoHandler:50] 
SocketConnectorIoProcessor-0.0, READ: TLSv1 Handshake, length = 81 
*** ServerHello, TLSv1 
.. 
.. 
Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA 
Compression Method: 0 
Extension renegotiation_info, renegotiated_connection: <empty> 
%% Initialized: [Session-1885, TLS_RSA_WITH_AES_128_CBC_SHA] 
** TLS_RSA_WITH_AES_128_CBC_SHA 
SocketConnectorIoProcessor-0.0, READ: TLSv1 Handshake, length = 3224 
*** Certificate chain 
chain [0] = [ 
Version: V3 
.. 
.. 
.. 
.. 

READ: TLSv1 Handshake, length = 14 
*** CertificateRequest 
Cert Types: RSA, DSS, ECDSA 
Cert Authorities: 
<Empty> 
*** ServerHelloDone 
*** Certificate chain 
*** 
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1 
WRITE: TLSv1 Handshake, length = 141 
SESSION KEYGEN: 
PreMaster Secret: 
.. 
.. 
CONNECTION KEYGEN: 
Client Nonce: 
.. 
.. 
Server Nonce: 
.. 
.. 
Master Secret: 
.. 
.. 
Client MAC write Secret: 
.. 
..         
Server MAC write Secret: 
.. 
.. 
Client write key: 
... 
Server write key: 
.. 
Client write IV: 
.. 
Server write IV: 
.. 
.. 
WRITE: TLSv1 Change Cipher Spec, length = 1 
*** Finished 
verify_data: { 85, 227, 34, 74, 171, 223, 226, 95, 232, 234, 118, 50 } 

WRITE: TLSv1 Handshake, length = 48 
READ: TLSv1 Alert, length = 2 
RECV TLSv1 ALERT: fatal, handshake_failure 
fatal: engine already closedRethrowing javax.net.ssl.SSLException: Received fatal alert: handshake_failure 
called closeOutbound() 
closeOutboundInternal() 
SEND TLSv1 ALERT: warning, description = close_notify 
WRITE: TLSv1 Alert, length = 32 
called closeInbound() 
fatal: engine already closedRethrowing javax.net.ssl.SSLException: Inbound closed before receiving peer's close_notify: possible truncation attack? 
called closeOutbound() 
closeOutboundInternal() 
+0

SSLルーチン:SSLルーチン:SSL3_GET_CLIENT_CERTIFICATE:ピアが証明書を返さなかった – fiddle

答えて

0
*** CertificateRequest 

サーバーは、クライアント証明書を望んでいるが、クライアントはいずれも送信しません。したがって、サーバはhandshake_failureアラートで接続を閉じます。

+0

これは証明機関が空であるため可能ですか?参考資料サーバーの自己署名証明書を使用しています – fiddle

+0

@fiddle:クライアントが証明書を送信しない理由はさまざまです。たとえば、クライアントが送信用に構成された証明書を持っていないか、またはクライアントがクライアント証明書をまったくサポートしていない可能性があります。この情報からは分かりにくい。また、サーバー証明書が自己署名されているかどうかは関係ありません。不足しているクライアント証明書だけがこの問題に関係します。 –

+0

私の.jksファイルには、サーバー中間証明書のエントリが1つしかありません。クライアント証明書をその場所に追加する必要がありますか?その後、どのように?あなたはガイドをお願いしますか? – fiddle

関連する問題