私はAndroid AppでRetrofitを使用しています。私が 'https://example.com'をベースURLとしてリクエストすると正常に動作します。しかし、私が 'https://www.example.com'をベースURLとしてリクエストすると、SSLHandshakeExceptionが返されます。私はなぜそれが起こっているのか理解していない。RetrofitはSSLHandshakeExceptionを返します
答えて
OkHttpでは、古いHTTPS設定のサポートが削除されており、到達しようとしているホスト を更新する必要があります。
この古いサーバーをサポートするには、OkHttp
で暗号スイートとTLSバージョンを構成できます。
私の理解から、これは、すべての重複しているCipherSuiteが使用されていることを確認します。ここで私は別のAndroidのバージョンでそれをテストから得た結果である: -
5.0作業 -
4.4.4作業 - エラー
4.3 -
OkHttp 2.3.0
5.1は、エラー
4.2.2 - エラー
4.1.1 - エラー
4.0 - エラー
OkHttp 2.2.0
5.1から
作業 - 作業
4.3 - -
4.4.4作業 -
4.2.2作業 -
4.1.1作業
5.0作業 4.0 - エラー
サーバーにSSL証明書をインストールしました。この問題は、サーバー上で行われたいくつかの変更によって解決できますか? –
私はそれが理由ではないと思う。 'https'を使わずに他のURLを試してみてください。 –
私は2.2.0
とtは
final 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[]{};
}
}
};
// Install the all-trusting trust manager
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.interceptors().add(httpLoggingInterceptor);
client.readTimeout(180, TimeUnit.SECONDS);
client.connectTimeout(180, TimeUnit.SECONDS);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, "keystore_pass".toCharArray());
sslContext.init(null, trustAllCerts, new SecureRandom());
client.sslSocketFactory(sslContext.getSocketFactory())
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
Gson gson = new GsonBuilder().setLenient().create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Common.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client.build())
.build();
serviceApi = retrofit.create(Api.class);
おかげで、これはあなたを助けることを願ってい証明書チェーンを検証しませんトラストマネージャを作成します。いつかsslバージョン1.2以下がサーバ側にもインストールされていません。
Glideライブラリでも同じことが起こっています。それは証明書の問題ですか?サーバーを変更する必要がありますか? –
はい、試してみることができます。 – Dilip
これを解決するには、サーバー上でどのような変更を行う必要がありますか。私たちは数日前にサーバー上のSSL証明書を変更しましたか? –
- 1. Retrofit 2コールは応答として500を返します
- 2. SSLHandshakeException
- 3. アンドロイドでヌルを返すRetrofit
- 4. Nullを返すRetroFitレスポンス
- 5. Android Retrofitライブラリは常にnullを返します
- 6. Android Retrofitはオブジェクトにnullを返します
- 7. Retrofit jsonを使用して空のテキストを返します
- 8. SSLHandshakeException(ローカルホスト)
- 9. Retrofit2 SSLHandshakeException
- 10. エラー:SSLHandshakeException
- 11. Retrofitはデータを返しますが、pojoオブジェクトは常に空です
- 12. Retrofitライブラリがnullを返すJson Response
- 13. Retrofit 2.0が不正なURLを返す
- 14. GCPのデータフロー - SSLHandshakeException
- 15. WSO2 SSLHandshakeException on Login
- 16. AndroidテストのSSLHandshakeException
- 17. Java時折SSLHandshakeException
- 18. CAS Tomcat SSLHandshakeException
- 19. Aerogear SSLHandshakeException CertPathValidatorException
- 20. SSLHandshakeExceptionを修正するには
- 21. Retrofitがレスポンスを返さない+ Nullオブジェクトリファレンス
- 22. Retrofit Json Parsingを使用してユーザープロファイルデータを返す
- 23. Retrofitデータを返すことができません
- 24. Android Retrofit - 空白のボディを返すAPI呼び出し
- 25. Retrofit v2のonResponseから値を返すには
- 26. glassfish SSLHandshakeException:致命的なアラートを受信しました:unknown_ca
- 27. Android Retrofit 1.9返信リストストリング成功時
- 28. Retrofit 2返信用応答データオブジェクト
- 29. TLS SMTPメールJavaがSSLHandShakeExceptionをスローする
- 30. rxJavaとRetrofitで繰り返し要求するログインフォーム
retrofitドキュメントをお読みになりましたか?そこに記載されている可能性があります –
ええ私はドキュメントを通過しました。私はどこにでもそれについて記述するのを見たことがありません。 –