SSL握手异常:SSL握手中止:ssl=0xbe6af938:系统调用期间出现I/O错误,连接被对等方重置

6
以下错误发生:javax.net.ssl.SSLHandshakeException: SSL握手中止:ssl=0xbe6af938:系统调用期间的I/O错误,连接被对等方重置 Retrofit类:
public class RetrofitClientInstance {

    private static Retrofit retrofit;
    

    public static Retrofit getRetrofitInstance() {
        
        if (retrofit == null) {
            Gson gson = new GsonBuilder().setLenient().create();

            retrofit = new retrofit2.Retrofit.Builder()
                    .client(HelperOkHttpClient.getOkHttpClient())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }
        return retrofit;
    }
}

错误/异常出现在这个方法中:
private void makeRequestToSecondAuthStep(ArrayList<String> creds) {

        AuthCheckHTTP defectSpecific = RetrofitClientInstance.getRetrofitInstance().create(AuthCheckHTTP.class);
        Observable<ResponseSingleRequestAuth<Object>> observableDefectsRelated = defectSpecific.getAuthCheck();
        observableDefectsRelated
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(specficDefects -> {
                    Log.w("ASYNCLI", "In defectspecif");
                    if (HelperIsNull.isNull(creds.get(3))) {
                        creds.set(3, creds.get(5));
                    }
                    DataBaseHelper.deleteAllData();
                    PublisherNotificationSync.getInstance().setLastSyncDate(INITIAL_DATE);
                    writeCredentialsToLocalDb();

                    actMain.runOnUiThread(new Runnable() {
                                              @Override
                                              public void run() {
                                                  presenterAuthAct.downloadData();
                                              }
                                          }
                    );
                })
                .doOnError(
                        throwable -> {
                            HelperToastMaker.createMessage(App.getAppContext(), "У вашего пользователя нет прав на пользования мобильным приложением");
                            ((Button) mainAct.findViewById(R.id.button)).setEnabled(true);
                            AppProperties.setpIdentificator("");
                        }
                ).doOnComplete(() -> {
            Log.w("Event", "Fired i guess");
        }).subscribe(new Observer<ResponseSingleRequestAuth<Object>>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(ResponseSingleRequestAuth<Object> objectResponseSingleRequestAuth) {

            }

            @Override
            public void onError(Throwable e) {
              // do nothing
            }

            @Override
            public void onComplete() {

            }
        });

    }
}

也许您可以将标准(SSL)添加到这个Retrofit类中,有人遇到过类似的问题吗?

可能出现了什么问题?几个月前-一切正常,项目没有被修改(存档) 谢谢

更新:与证书无关,这是SAP,他们自己进行更新。


这不是应用程序相关的问题...请检查服务器证书和过期日期... - crack_head
请使用以下链接检查您的服务器SSL错误:https://www.ssllabs.com - crack_head
1个回答

2
我不确定这里提供的信息是否足够准确地诊断您的问题,但是错误提示表示SSL握手错误,这通常对我来说意味着问题不在代码中,而在于证书/通信渠道的可接受加密算法。
Retrofit是一个REST框架,因此我假设您在其上编写了API,而retrofit处理您的HTTP会话和SSL相关内容。您说解决方案突然停止工作了。您的retrofit依赖项是否已经更新?也许将依赖项更新到最新版本,重新打包应用程序,看看是否有效?
参考链接:Retrofit/OkHTTP examples with TLS Context

1
Retrofit已经更新到最新版本,所以几乎没有依赖问题。 - Сергей Беляков
1
我和一位后台专家交谈,他说:“那里没有什么需要更新的”,因为这是SAP,他们会自己处理所有事情。 - Сергей Беляков
听起来你是在扮演客户端而不是服务器。你能发布一下创建SSLContext对象的代码部分吗? - TheFunk
不,因为应用程序中根本没有这样的类。 - Сергей Беляков
1
我创建了一个TSLFactory类,其中包含SSLContext context = SSLContext.getInstance("TLS")代码; 但我不太明白如何在Retrofit中连接它以及连接到哪里? - Сергей Беляков
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接