Es gibt einen Legacy-Cisco IPS-Server, mit dem ich versuchen möchte, https zu verwenden. Das Problem ist dieser Server nur Händeschütteln mit bestimmten Bedingungen akzeptiert:Ist es möglich, den Erweiterungsteil von SSL-Handshakes in Java zu entfernen?
Die Version TLSv1.0 sein muss, muss die Cipher Suite SSL_RSA_WITH_RC4_128_MD5 oder SSL_RSA_WITH_RC4_128_SHA sein, und es darf keine Erweiterungen sein.
ich implementiert ein Hand-made „Client“, die die folgenden Informationen als Handshake (wireshark Ausgang) sendet:
Secure Sockets Layer
TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 45
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 41
Version: TLS 1.0 (0x0301)
Random
Session ID Length: 0
Cipher Suites Length: 2
Cipher Suites (1 suite)
Compression Methods Length: 1
Compression Methods (1 method)
Der Server sendet die Serverhello-Nachricht zurück.
Jetzt möchte ich Javas SSL-Implementierung verwenden, genau das gleiche ClientHello zu senden. Der folgende Code:
System.setProperty("https.protocols", "TLSv1");
System.setProperty("javax.net.debug", "ssl:handshake");
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket("ips-server", 443);
socket.setEnabledProtocols(new String[] {"TLSv1"});
socket.setEnabledCipherSuites(new String[] {"SSL_RSA_WITH_RC4_128_MD5"});
socket.startHandshake();
erzeugt den folgenden Handshake:
Secure Sockets Layer
TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 52
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 48
Version: TLS 1.0 (0x0301)
Random
Session ID Length: 0
Cipher Suites Length: 2
Cipher Suites (1 suite)
Compression Methods Length: 1
Compression Methods (1 method)
Extensions Length: 5
Extension: renegotiation_info
Type: renegotiation_info (0xff01)
Length: 1
Renegotiation Info extension
Dieser den Server bewirkt, dass das folgende Paket zurück senden:
TLSv1.2 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
Ist es möglich zu machen Java nicht Senden Sie den "Extension" -Teil des Pakets?
Die Einstellung 'https.protocols' hat keine Wirkung, wenn Sie' HttpsURLConnection' nicht verwenden. – EJP