javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException

时间:2017-11-12 12:19:27

标签: java android ssl server

我有一个Android应用程序,它调用我服务器上托管的API。几个月来一切都很好。但是今天,Android应用程序无法连接到服务器,它显示了这个堆栈跟踪:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
                                                                                 at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:361)
                                                                                 at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:281)
                                                                                 at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:251)
                                                                                 at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:151)
                                                                                 at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:192)
                                                                                 at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121)
                                                                                 at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100)
                                                                                 at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                                 at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                                 at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                                 at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                                 at com.xxx.xxx.data.APIService$Factory$1.intercept(APIService.java:37)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                                 at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                                 at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185)
                                                                                 at okhttp3.RealCall.execute(RealCall.java:69)
                                                                                 at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
                                                                                 at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:144)
                                                                                 at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:125)

我运行了以下openssl命令:

openssl s_client -connect XXX.com:443 -servername XXX.com -showcerts | openssl x509 -text -noout
depth=0 CN = XXX
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = XXX
verify error:num=21:unable to verify the first certificate
verify return:1

然后显示有关证书的信息。

该应用程序使用Retrofit连接到服务器。服务器托管在Bluehost上。我已启用SSL证书。

我能做一个快速可行的解决方案吗?为什么这突然发生了?是否有来自服务器端的修复,以便我需要发布应用程序的更新?

0 个答案:

没有答案