2012-10-07 61 views
2

我想使用SSLv2啓動與遠程服務器的SSL連接。我正在使用Java。我試着用得到我的插座支持的協議:如何使用SSLv2啓動SSL連接

String[] suppProtocols=socket.getSupportedProtocols(); 
System.out.println("The protocols supported for this socket are: 
"+Arrays.toString(suppProtocols)); 

我在輸出得到這個:

[SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2] 

現在,我讀了Java不支持的SSLv2和SSLv2Hello只發送hello消息使用SSLv2。我無法理解這是什麼意思?與客戶端是否支持SSLv2不一樣?我如何使用SSLv2進行SSL連接。

回答

4

SSLv3和TLSv1.x提供了一種將客戶端Hello消息包裝在SSLv2客戶端中的方法,您好,如TLS specification: Backward compatibility with SSL中所述。 SSLv3和TLS 1及以上版本具有更一致的協商機制來協商版本。由於TLS規範說:

的能力送2.0版客戶端的Hello報文將 一切應有的急速淘汰。執行者應該儘可能快地向前推進。版本3.0 爲更新版本提供了更好的機制。

Sun/Oracle JRE或OpenJDK不支持SSLv2。將SSLv3 +消息封裝到SSLv2消息中僅用於向後兼容。現在是disabled by default for clients in Java 7。從服務器的角度來看,它至少可以接受其他SSLv3 +客戶端,它們以這種方式將客戶端Hello消息封裝在SSLv2消息中,無論他們是否支持SSLv2。

您可以在this question中找到有關Java支持(包括其他實現)的更多詳細信息。

一般來說,SSLv2被認爲是不安全的:你根本不應該使用它。總體趨勢是從SSLv3轉向TLS 1.0或更高版本,而不是倒退。

+0

我知道這是不安全的,不應該使用。我需要將其用於測試目的。如果可能的話,我仍然需要任何方法來做到這一點 –

+1

不太確定你想要測試什麼。 SSLv2確實不應該存在。這就是說,檢查EJP對我所鏈接問題的回答。顯然,IBM JRE支持它。或者,如果您確實需要與SSLv2服務器交談,則可以使用通過OpenSSL實現的隧道(並使用v2配置),或許使用類似「stunnel」的隧道,而不是使用JSSE。 – Bruno

+0

@Bruno這個答案中的第二個'SSLv3'應該是'SSLv2'(客戶端你好)。 – EJP

相關問題