OkHttpクライアントへのカスタム証明書を追加します

Makaloneルクマン:

私は(APIを持っているdoesntのサイトから)を取得し、解析することができますHTML Androidアプリを作るしようとしています。私はOkHttpを使用しています。このサイトは、信頼できない(しかし、有効な)証明書を持っています。私は取得しています:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

私はすでに(公式の方法設定したhttps://developer.android.com/training/articles/security-ssl#java)を、今私はOkHttpClientでそれをリンクする必要があります。

私は試した

    OkHttpClient client = new OkHttpClient;

    OkHttpClient.Builder builder = client.newBuilder();
    builder.sslSocketFactory(sslcontext.getSocketFactory()).build();

しかし、それは仕事をdoesntの、そしてまたそれが推奨されていません。感謝

ルカNicoletti:

あなたは使用する必要はsslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager)非推奨されていません。

(証明書チェーンを検証しませんトラストマネージャを作成します)、この変数を使用します。

TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new java.security.cert.X509Certificate[]{};
        }
    }
};

とに渡しsslSocketFactory()、このように:

builder.sslSocketFactory(sslSocketFactory, (X509TrustManager)trustAllCerts[0]);

また、これはすべてのホストを確認するために適用されます。

builder.hostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
});

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=178363&siteId=1