【问题标题】:How to inject custom SSLSocketFactory into Azure Java SDK如何将自定义 SSLSocketFactory 注入 Azure Java SDK
【发布时间】:2015-09-02 14:29:14
【问题描述】:

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

我已经提出了 an issue on the AD library for java on github 相同的问题,但如果有办法可以覆盖它,在代码修复完成之前会更好。

【问题讨论】:

    标签: java azure ssl active-directory sslsocketfactory


    【解决方案1】:

    据我所知,Azure SDK for Java 使用了 SSLContextSSLSocketFactory,它们在包 javax.net.ssl

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

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

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

    其实你也可以用同样的方法设置TLSSSL。 我建议你可以参考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);
    

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

    【讨论】:

    • 这就是我为通用 SSLSocketFactory 添加 SSL 上下文的方式。我想知道为 Azure java SDK 执行此操作。
    • 我更新了我的回复,请参考。如果我有什么误解,请告诉我
    • 我认为问题没有澄清:我正在使用 Microsoft 提供的 adal4j 库从 AD 服务器进行身份验证,我没有编写自己的 SDK。 This is the sample I am using to authenticate。如果问题仍然不清楚,请告诉我。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2015-03-09
      相关资源
      最近更新 更多