我有一个协议,其中有一个普通的普通套接字升级到SSL / TLS。我需要能够控制处理SSL握手的超时以及其他参数,例如允许的协议版本。 (例如,关闭SSLv3)。
您可以通过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创建自己的上下文,所以设置默认值不会有帮助。)
答案 0 :(得分:-1)
对于特定协议选择,您在调用startHandshake之前尝试过SSLSocket.setEnabledProtocols吗?
对于握手超时设置,您可以使用SSLCertificateSocketFactory。