据我所知,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和SSL。
我建议你可以参考samples about SSLSocketFactory
【更新】
这就是我为通用 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);
如有任何疑问,请告诉我。