- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有没有一种方法可以覆盖 Azure HTTPConnection 默认使用的 SSLSocketFactory
并使用我自己的自定义 SSLSocketFactory
?我需要这个,因为我使用的系统使用不同的 SSLContexts 与不同的服务器通信,我不能使用默认的 SSLSocketFactory。
我提出了an issue on the AD library for java on github关于相同的内容,但如果有一种方法可以覆盖它,那么在完成代码修复之前会更好。
最佳答案
据我所知,Azure SDK for Java 使用了 SSLContext
和 SSLSocketFactory
包 javax.net.ssl
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
如果我理解正确的话,我认为你可以对不同的 SSLContext
使用 sslContext.getInstance(*yourparamters*)
。根据我的经验,我们可以使用此方法返回一个实现指定安全套接字协议(protocol)的SSLContext
对象。例如,如果您使用SSLV3
,您可以编写如下代码:
SSLContext context=SSLContext.getInstance("SSLv3");
其实,你也可以用同样的方法来设置TLS
和SSL
。我建议你可以引用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/
我是一名优秀的程序员,十分优秀!