私は実際にこれを試したことはありませんが、独自の信頼マネージャーを実装できないのはなぜですか。これは、最初にデフォルトの信頼マネージャーに委任して、証明書が有効かどうかを確認し、そうでない場合は、ユーザーに証明書を受け入れるかどうかを尋ねます。 ?
デフォルト値を使用するために、null 引数を使用してほとんどのセキュリティ クラスを初期化できます。デフォルトのトラスト マネージャーを取得するには、使用可能なトラスト マネージャーを取得し、mgrs 配列の最初のトラスト マネージャーを選択してX509TrustManager
インターフェイスを実装する必要があります。通常、配列には 1 つの要素しか含まれません。
TrustManagerFactory trustmanagerfactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustmanagerfactory.init((KeyStore)null);
TrustManager[] mgrs = trustmanagerfactory.getTrustManagers();
デフォルトのトラスト マネージャーを独自の拡張機能でラップしたら、SSL コンテキストを初期化し、そこからソケット ファクトリを取得する必要があります。
SSLContext sslContext=SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null, new TrustManager[] {myTm}, null);
SSLSocketFactory sf = sslContext.getSocketFactory();
次に、このソケット ファクトリを使用して新しいクライアント ソケットを作成するか、それを に渡してHttpsURLConnection.setDefaultSSLSocketFactory
、独自のトラスト マネージャーで URL で https プロトコルを使用します。