SSL을 사용하여 C 서버와 통신하도록 Java 클라이언트를 가져 오려고합니다.SSLSockets 및 Cipher Specs 관련 문제
문제는 - 내가 어떤 서버 소스가없는 나는 악수 실패 오류 받고 있어요 : 작업 C 클라이언트 (나는 '돈 것을, 내가 지금 알고있는 몇 가지 무거운 의무 wiresharking 후
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1657)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:932)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1107)
at posslu.Main.main(Main.java:36)
Java Result: 1
을 t)는도 자신의 소스 코드에 액세스 할 수있는 클라이언트 - 서버 헬로 패킷이 암호화 사양이 있습니다
Cipher Spec: SSL2_DES_192_EDE3_CBC_WITH_MD5 (0x0700c0)
Cipher Spec: SSL2_IDEA_128_CBC_WITH_MD5 (0x050080)
Cipher Spec: SSL2_RC2_CBC_128_CBC_WITH_MD5 (0x030080)
Cipher Spec: SSL2_RC4_128_WITH_MD5 (0x010080)
Cipher Spec: SSL2_RC4_64_WITH_MD5 (0x080080)
Cipher Spec: SSL2_DES_64_CBC_WITH_MD5 (0x060040)
Cipher Spec: SSL2_RC2_CBC_128_CBC_WITH_MD5 (0x040080)
Cipher Spec: SSL2_RC4_128_EXPORT40_WITH_MD5 (0x020080)
을 모든 패킷은 SSLv2의 프로토콜에 전송됩니다.
그리고 이러한 SSLSocket.getSupportedCipherSuites의 사양입니다() 메소드 :
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL_DHE_RSA_WITH_DES_CBC_SHA
SSL_DHE_DSS_WITH_DES_CBC_SHA
SSL_RSA_EXPORT_WITH_RC4_40_MD5
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
SSL_DH_anon_WITH_RC4_128_MD5
TLS_DH_anon_WITH_AES_128_CBC_SHA
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
SSL_DH_anon_WITH_DES_CBC_SHA
SSL_DH_anon_EXPORT_WITH_RC4_40_MD5
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
TLS_KRB5_WITH_RC4_128_SHA
TLS_KRB5_WITH_RC4_128_MD5
TLS_KRB5_WITH_3DES_EDE_CBC_SHA
TLS_KRB5_WITH_3DES_EDE_CBC_MD5
TLS_KRB5_WITH_DES_CBC_SHA
TLS_KRB5_WITH_DES_CBC_MD5
TLS_KRB5_EXPORT_WITH_RC4_40_SHA
TLS_KRB5_EXPORT_WITH_RC4_40_MD5
TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
지금 나는 C 서버에서 모두 지원됩니다 보인다
Cipher Spec: SSL2_RC4_128_WITH_MD5 (0x010080)
를 사용하려면 내 자바 클라이언트 .
SSLSocketFactory sslsockfact = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsockfact.createSocket(args[0], args[1]);
sslsocket.setEnabledCipherSuites(new String[] { "SSL_RSA_WITH_RC4_128_MD5" });
sslsocket.startHandshake();
그러나이 Cipher 스펙이 클라이언트에 전송되는 어떤 이유로
헬로 패킷이 :Cipher Spec: TLS_RSA_WITH_RC4_128_MD5 (0x000004)
Cipher Spec: SSL2_RC4_128_WITH_MD5 (0x010080)
거기에만 두 번째는 포함되지해야
그래서 나는이 코드를 함께했다? 이렇게하면 서버가 TLSv1 프로토콜로 server-hello 패킷을 보내고 핸드 셰이크 오류가 발생합니다. 내가 getSupportedProtocols 메소드()에서 가져온이 지원되는 프로토콜 :
sslsocket.setEnabledProtocols(new String[] { "SSLv2Hello" });
:
SSLv2Hello
SSLv3
TLSv1
을 내 코드에서 이런 식으로 뭔가를 넣으면
나는 무슨 일이 일어나고 있는지 알아 내려고 갔다
말합니다 :
Exception in thread "main" java.lang.IllegalArgumentException: SSLv2Hellocannot be enabled unless TLSv1 or SSLv3 is also enabled
내가로 전환하면 ... SSLv3에에
sslsocket.setEnabledProtocols(new String[] { "SSLv2Hello", "SSLv3" });
서버 응답 및 I 핸드 셰이크 실패를 얻을
그래서 내가 어떻게이 작동하도록하는 어떤 도움을 아무 생각이 다야?
SSLv2가 더 이상 지원되지 않으며 단순히 Java에서 사용할 수 없습니까?