0

SSLSocketFactoryAzure HTTPConnection によって既定で使用されるをオーバーライドし、独自のカスタムを使用する方法はありますSSLSocketFactoryか? 私が使用するシステムは、異なる SSLContexts を使用して異なるサーバーと通信し、デフォルトの SSLSocketFactory を使用できないため、これが必要です。

同じことに関して、 github の Java の AD ライブラリで問題を提起しましたが、それをオーバーライドできる方法があれば、コードの修正が行われる前にそれを行う方がよいでしょう。

4

2 に答える 2

1

私が知っているように、Azure SDK for Javaはパッケージに含まれるSSLContextandを使用しましたSSLSocketFactoryjavax.net.ssl

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

私の理解が正しければsslContext.getInstance(*yourparamters*)、さまざまな用途に使用できると思います。SSLContext私の経験に基づいて、このメソッドを使用してSSLContext、指定されたセキュア ソケット プロトコルを実装するオブジェクトを返すことができます。たとえば、 を使用する場合SSLV3、次のようにコーディングできます。

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

実際には、同じ方法を使用して と を設定しTLSますSSLSSLSocketFactory に関するサンプルを参照できることをお勧めします


【更新】</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 に答える