私は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. Retrofit2 SSLHandshakeException
- 3. Retrofit jsonを使用して空のテキストを返します
- 4. Retrofitはデータを返しますが、pojoオブジェクトは常に空です
- 5. Java時折SSLHandshakeException
- 6. CAS Tomcat SSLHandshakeException
- 7. WSO2 SSLHandshakeException on Login
- 8. Aerogear SSLHandshakeException CertPathValidatorException
- 9. Retrofit 2.0が不正なURLを返す
- 10. Retrofit Json Parsingを使用してユーザープロファイルデータを返す
- 11. Retrofitデータを返すことができません
- 12. Retrofit 2返信用応答データオブジェクト
- 13. Android Retrofit 1.9返信リストストリング成功時
- 14. java SSLHandshakeException一般的なSSLEngine
- 15. SSLHandshakeException - %%無効:[セッション-1、SSL_RSA_WITH_3DES_EDE_CBC_SHA]
- 16. rxJavaとRetrofitで繰り返し要求するログインフォーム
- 17. JSONObjectでretrofitを呼び出します。
- 18. Retrofitで画像をダウンロードする空のファイルを返す
- 19. Android Retrofitは、jsonobjectをフェッチしているときに常にboolean型のfalse値を返します。
- 20. SSLHandshakeException:ピアによって接続が閉じられました
- 21. Gson + Retrofit、どうしますか?
- 22. Retrofitでエラーが発生しました
- 23. Retrofitはrx.Future/Task/Async/Singleをサポートしていますか?
- 24. Retrofitはヌル値のレスポンスを変換します
- 25. データはRetrofit API 2.1.0を介してポストしていません
- 26. SSLHandshakeException共通の暗号スイートはありません - Linuxはwiremockだけを使用します
- 27. SSLHandshakeException(簡易SSL実行時)Javaの例
- 28. 自己署名証明書を使用したJava SSLHandshakeException
- 29. retrofit 2ヘッダーが機能しません
- 30. Retrofit - android.os.NetworkOnMainThreadException
retrofitドキュメントをお読みになりましたか?そこに記載されている可能性があります –
ええ私はドキュメントを通過しました。私はどこにでもそれについて記述するのを見たことがありません。 –