有没有办法可以覆盖SSLSocketFactory
Azure HTTPConnection 默认使用的并使用我自己的自定义SSLSocketFactory
?我需要这个,因为我使用的系统使用不同的 SSLContexts 与不同的服务器通信,并且我不能使用默认的 SSLSocketFactory。
我已经在 github 上的 Java 的 AD 库上提出了一个问题,但如果有一种方法可以覆盖它,那么在代码修复完成之前会更好。
有没有办法可以覆盖SSLSocketFactory
Azure HTTPConnection 默认使用的并使用我自己的自定义SSLSocketFactory
?我需要这个,因为我使用的系统使用不同的 SSLContexts 与不同的服务器通信,并且我不能使用默认的 SSLSocketFactory。
我已经在 github 上的 Java 的 AD 库上提出了一个问题,但如果有一种方法可以覆盖它,那么在代码修复完成之前会更好。
据我所知,Azure SDK for Java 使用了包中SSLContext
的SSLSocketFactory
javax.net.ssl
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
如果我理解正确,我认为您可以使用sslContext.getInstance(*yourparamters*)
不同的方法。SSLContext
根据我的经验,我们可以使用此方法返回一个SSLContext
实现指定安全套接字协议的对象。例如,如果您使用SSLV3
,您可以编写如下代码:
SSLContext context=SSLContext.getInstance("SSLv3");
实际上,您也可以使用相同的方法来设置TLS
and SSL
。我建议您可以参考有关 SSLSocketFactory 的示例
【更新】</p>
这就是我为通用 SSLSocketFactory 添加 SSL 上下文的方式。我想知道为 Azure java SDK 执行此操作。
如果我理解的话,您似乎想为不同的服务器获得不同的 SocketFactroy。在这种情况下,我建议你可以创建一个 socketfactory 管理类来管理你所有的 socketfactory。请看这个简单的代码:
public class SSLScoketFactoryManage {
public static SSLSocketFactory getSSLSocketFactory(String keyStoreName, String password) throws UnrecoverableKeyException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException, IOException {
KeyStore ks= getKeyStore(keyStoreName, password);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
keyManagerFactory.init(ks, password.toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());
return context.getSocketFactory();
}
}
您可以在不同的套接字中使用此方法,如下所示:
SSLSocketFactory sslFactory = getSSLSocketFactory(keyStore, keyStorePassword);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(sslFactory);
有任何疑虑,请告诉我。
我认为威尔的回答是正确的。SSLSocketFactory 是通用类,并不特定于 Azure。您可以在自己的代码中使用上述方法。根据您的服务器,您可以创建不同的 SSLSocketFactory 对象。我认为 Azure SDK for Java 没有任何理由公开它正在使用的 SSLSocketFactory。如果确实如此,那么它特定于 Azure http 通信,我认为您不能将它用于其他服务器。您能否进一步澄清您的问题?另外,我建议您在标签中添加“adal”,以便 Adal 团队可以查看它。https://stackoverflow.com/questions/tagged/adal