0

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

我已经在 github 上的 Java 的 AD 库上提出了一个问题,但如果有一种方法可以覆盖它,那么在代码修复完成之前会更好。

4

2 回答 2

1

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

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

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

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

实际上,您也可以使用相同的方法来设置TLSand 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);

有任何疑虑,请告诉我。

于 2015-09-04T03:37:35.363 回答
0

我认为威尔的回答是正确的。SSLSocketFactory 是通用类,并不特定于 Azure。您可以在自己的代码中使用上述方法。根据您的服务器,您可以创建不同的 SSLSocketFactory 对象。我认为 Azure SDK for Java 没有任何理由公开它正在使用的 SSLSocketFactory。如果确实如此,那么它特定于 Azure http 通信,我认为您不能将它用于其他服务器。您能否进一步澄清您的问题?另外,我建议您在标签中添加“adal”,以便 Adal 团队可以查看它。https://stackoverflow.com/questions/tagged/adal

于 2015-09-25T18:54:01.260 回答