27

クライアント証明書認証 (PKCS 12 ファイルを使用) を必要とする Android アプリに取り組んでいます。すべてのapache.http.*.

SSLSocketFactoryただし、 OkHttpなどを使用せずにクライアント証明書の認証を処理する他の方法は見つかりませんでした。では、この特定のケースでは、どのような行動を取るのが最善でしょうか? この種の認証を処理する OkHttp の別の方法はありますか?

4

3 に答える 3

53

https を使用している場合は、有効な証明書を使用する必要があります。開発段階では、証明書を信頼する必要があります。 sslSocketFactory(SSLSocketFactory sslSocketFactory)は廃止され、 に置き換えられましたsslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager)。gradle ファイルを更新する必要があります。以下のコードは、SSL 証明書を信頼する信頼できる OkHttpClient を取得するのに役立ちます。

TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
    throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
}
X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[] { trustManager }, null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient client = new OkHttpClient.Builder().sslSocketFactory(sslSocketFactory, trustManager);
于 2016-11-29T20:11:47.697 に答える