这个问题在这里已经有答案了:
sslhandshakeexception-链验证失败,如何解决(6个答案)
android仿真器“链验证失败”连接开发者机器与自签名证书(6个答案)
三天前关门了。
我尝试用okhttp客户端调用api,但在android中没有成功。api在ios和postman上运行良好。
我得到一个 SSLHandshakeException
仅在android中。那么,原因是什么,如何解决呢?
okhttp库
implementation 'com.squareup.okhttp3:okhttp:3.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
http客户端
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
if (BuildConfig.DEBUG)
builder.addInterceptor(logging);
OkHttpClient client= builder.build();
日志:
javax.net.ssl.SSLHandshakeException: Chain validation failed
at com.android.org.conscrypt.SSLUtils.toSSLHandshakeException(SSLUtils.java:362)
at com.android.org.conscrypt.ConscryptEngine.convertException(ConscryptEngine.java:1134)
at com.android.org.conscrypt.ConscryptEngine.readPlaintextData(ConscryptEngine.java:1089)
at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:876)
at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:747)
at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:712)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:849)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.access$100(ConscryptEngineSocket.java:722)
at com.android.org.conscrypt.ConscryptEngineSocket.doHandshake(ConscryptEngineSocket.java:238)
at com.android.org.conscrypt.ConscryptEngineSocket.startHandshake(ConscryptEngineSocket.java:217)
at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:299)
at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:268)
at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:160)
at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:256)
at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:134)
at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
测试设备和操作系统版本
oneplus 6t(android 10)
三星s5(android 9)
三星a5(安卓6)
android仿真器(android 11)
lg nexus(安卓6)
1条答案
按热度按时间hiz5n14c1#
这是一个复制的android模拟器“链验证失败”连接开发者机器与自签名证书和sslhandshakeexception-链验证失败,如何解决?
很可能是设备上的日期错误、证书过期(如果它在其他地方工作则不太可能)、或者android设备上缺少ca证书。
没有根案例,很难判断发生了什么。您可能只包含了一半的异常跟踪。我相信原因也在后面。