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;
}
});