2015-07-20 123 views
0

單獨的JDK/JRE版本是否確定SSLSocket.getSupportedProtocols()的結果?或者還有其他可以影響這個結果的配置/啓動參數嗎?例如,如果應用程序在JDK 1.7 update 21上運行,則此方法將返回[SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2]。但是,如果應用程序在不支持SSLv3的JDK 1.8上運行,該方法是否僅返回[TLSv1,TLSv1.1,TLSv1.2]?單獨的JDK/JRE版本是否確定SSLSocket.getSupportedProtocols()的結果?

我假設這個問題的答案也適用於默認的啓用列表。例如,在JDK 1.7 update 21中,SSLSocket.getEnabledProtocols()默認返回[SSLv3,TLSv1]。所以對於JDK 1.8,默認啓用列表是[TLSv1.1,TLSv1.2]?

回答

2

此前的Java 7,你剛jdk.certpath.disabledAlgorithms禁用算法。

從更高版本的Java 7開始,您也有jdk.tls.disabledAlgorithms。兩者之間的區別似乎是jdk.tls.disabledAlgorithms也可以限制TLS/SSL版本。

jdk.tls.legacyAlgorithms也存在。此列表中的協議僅在所有其他允許的協議被拒絕後纔會使用。

在Java 8u51,這些默認值(在Java的lib/security/java.security文件中)是:

jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024 

jdk.tls.disabledAlgorithms=SSLv3, DH keySize < 768 

jdk.tls.legacyAlgorithms= \ 
     K_NULL, C_NULL, M_NULL, \ 
     DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_anon_EXPORT, DH_DSS_EXPORT, \ 
     DH_RSA_EXPORT, RSA_EXPORT, \ 
     DH_anon, ECDH_anon, \ 
     RC4_128, RC4_40, DES_CBC, DES40_CBC 
+2

在一個側面說明,的SSLv2是較新的Java版本中完全刪除,不能使用,因此爲什麼它不」 t出現在'jdk.tls.disabledAlgorithms'列表中。 – Powerlord

+0

配置在這個java.security文件中啓用/禁用SSL/TLS協議是否正常?或者我應該在客戶端代碼中處理這個問題?也就是說,我將檢索所有支持的協議,然後取出我不想要的那些(SSLv3,TLSv1),並將其餘的setEnabled取出。 – Zoomzoom

+0

@Zoomzoom你可以真的做到這一點。我做了比其他任何事情都更多的Web開發,並且在那裏只列出要使用的協議/密碼是很平常的。 – Powerlord