Java 如何调用sslSocket.setHostname()?
我的目标:Java 如何调用sslSocket.setHostname()?,java,android,ssl,sni,Java,Android,Ssl,Sni,我的目标: SSLv3显式禁用-意味着覆盖工厂类上已启用协议的列表 启用SNI-意味着在握手之前调用套接字上的setHostname 伪码 SSLCertificateSocketFactory factory = SSLCertificateSocketFactory.getDefault(timeout); // set keystore and truststore, etc. httpsURLConnection.setSSLSocketFactory(factory); 换句话说,我
SSLCertificateSocketFactory factory = SSLCertificateSocketFactory.getDefault(timeout);
// set keystore and truststore, etc.
httpsURLConnection.setSSLSocketFactory(factory);
换句话说,我甚至看不到插座
假设SSLCertificateSocketFactory没有任何公共构造函数,HttpsURLConnection上的setter需要工厂类(而不是接口)我不知道如何在工厂和连接之间进行拦截,以便调用setHostname…您可以编写
SSLCertificateSocketFactory
的子类,以提供所需的构造函数。@Michael不幸的是,SSLCertificateSocketFactory没有非私有构造函数。您可以传递SSLCertificateSocketFactory
实例作为派生类构造函数的参数。@Michael您的新构造函数将无法调用任何超级构造函数,因此它将无法编译:(啊,没错。虽然SSLCertificateSocketFactory(int handshakeTimeoutMillis)
仍然是公开的,但它只是被标记为不推荐使用。另一种选择是获取SSLCertificateSocketFactory
的源代码,并基于它实现您自己的版本。