2012-01-08 28 views
5

我有一個協議,其中有一個普通的普通套接字升級到SSL/TLS。我需要能夠控制處理SSL握手的超時以及其他參數(如允許的協議版本)。 (例如關閉SSLv3)。SSLSocketFactory設置握手超時和套接字屬性

您可以通過javax.net.ssl.SSLSocketFactory做這一切除了握手超時,你可以打電話createSocket(socket, host port, autoClose),設置返回SSLSocket額外的設置,然後調用startHandshake到握手。但似乎沒有辦法設置握手超時設置,並且默認設置很小。

不要害怕,android.net.SSLCertificateSocketFactory就在這裏,它允許你控制握手超時設置,但它也改變了createSocket(socket, host, port, autoClose)的行爲來進行實際的握手,所以等到SSLSocket從工廠返回時遲到做任何會影響握手的事情(如關閉SSLv3)。

有兩種方法可以做到嗎?我需要能夠在Api v8上執行此操作

(SSLContext/SSLParameters看起來像它可能很有用,但它是Api v9,但它看起來像SSLCertificateSocketFactory創建它自己的上下文,因此設置默認的上下文不會有幫助)。

回答

-1

對於特定的協議選擇,您是否在調用startHandshake之前嘗試了SSLSocket.setEnabledProtocols?

對於握手超時設置,您可以使用SSLCertificateSocketFactory。

+1

如果您從SSLCertificateSocketFactory獲取套接字(您需要設置超時時間),它會自動爲您調用startHandshake,因此您無法在套接字實例上設置協議。 – superfell 2012-01-10 03:44:41