gpt4 book ai didi

java - 如何将自定义 SSLSocketFactory 注入(inject) Azure Java SDK

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:14 24 4
gpt4 key购买 nike

有没有一种方法可以覆盖 Azure HTTPConnection 默认使用的 SSLSocketFactory 并使用我自己的自定义 SSLSocketFactory?我需要这个,因为我使用的系统使用不同的 SSLContexts 与不同的服务器通信,我不能使用默认的 SSLSocketFactory。

我提出了an issue on the AD library for java on github关于相同的内容,但如果有一种方法可以覆盖它,那么在完成代码修复之前会更好。

最佳答案

据我所知,Azure SDK for Java 使用了 SSLContextSSLSocketFactoryjavax.net.ssl

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;

如果我理解正确的话,我认为你可以对不同的 SSLContext 使用 sslContext.getInstance(*yourparamters*)。根据我的经验,我们可以使用此方法返回一个实现指定安全套接字协议(protocol)的SSLContext对象。例如,如果您使用SSLV3,您可以编写如下代码:

SSLContext context=SSLContext.getInstance("SSLv3");

其实,你也可以用同样的方法来设置TLSSSL。我建议你可以引用samples about SSLSocketFactory


【更新】

This is how I would add an SSL context for a generic SSLSocketFactory. I want to know to do this for the 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);

如有任何疑虑,请告诉我。

关于java - 如何将自定义 SSLSocketFactory 注入(inject) Azure Java SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32355933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com