2017-02-09 3 views
0

Ich benutze quickfix, um das Zertifikat des Servers zu validieren und tödlichen handshake_failure zu erhalten.Problem, das selbstsigniertes Zertifikat prüft: handshake_failure empfangen

Dies ist, wie es mir aussieht: ist

  • Initial Handshake

    Der Client verbindet
  • eingeleitet.

  • Der Server akzeptiert.

  • Ein TLS-Handshake, in denen:

    o Cipher Suiten erfolgreich ausgehandelt werden. .

    o Der Client überprüft das Serverzertifikat

    o Der Server schließt willkürlich die Buchse (SEND TLSv1 ALERT:. Warnung, description = close_notify < - Das sieht jedoch wie eine saubere Schließung)

    o Der Client bleibt hängen

Kann jemand einen Blick darauf werfen. Bitte.

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

Server sieht: SSL-Routinen: SSL3_GET_CLIENT_CERTIFICATE: Peer hat kein Zertifikat zurückgegeben – fiddle

Antwort

0
*** CertificateRequest 

Der Server will ein Client-Zertifikat aber der Client jede nicht senden wird. Daher schließt der Server die Verbindung mit einer Handshake_Failure-Warnung.

+0

kann dies sein, weil Zertifizierungsstellen: leer? FYI wir verwenden das selbstsignierte Zertifikat des Servers – fiddle

+0

@fiddle: Es kann verschiedene Gründe geben, warum der Client kein Zertifikat sendet. Zum Beispiel hat der Client möglicherweise kein Zertifikat zum Senden konfiguriert, oder der Client hat möglicherweise überhaupt keine Unterstützung für Clientzertifikate. Schwer zu sagen von diesen wenigen Informationen. Und es ist irrelevant, wenn das Serverzertifikat selbstsigniert ist oder nicht. Nur das fehlende Client-Zertifikat ist für dieses Problem wichtig. –

+0

Ich sehe meine .jks-Datei hat nur einen Eintrag für das Server-Zwischenzertifikat. Muss ich mein Client-Zertifikat dort oder an anderer Stelle hinzufügen? Wenn dann, wie? Könntest du bitte führen? – fiddle

Verwandte Themen