TLSv1未启用或客户端不支持。

6
我使用okhttp发送请求到服务器,但是出现了错误。
Server chose TLSv1, but that protocol version is not enabled or not supported by the client.
javax.net.ssl.SSLHandshakeException: Server chose TLSv1, but that protocol version is not enabled or not supported by the client.
    at sun.security.ssl.ClientHandshaker.serverHello(ClientHandshaker.java:452)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:206)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:336)
    at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:300)
    at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:185)
    at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.java:224)
    at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.java:108)
    at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.java:88)
    at okhttp3.internal.connection.Transmitter.newExchange(Transmitter.java:169)
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:41)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)

但是我发送请求多次,它就可以工作。我不知道为什么。请帮助我!


请参考此答案了解如何设置TLS版本:https://dev59.com/_l4b5IYBdhLWcg3wYAb6#29255161 - Victor P
我做到了,但有时在第一次请求中出现了错误,我再次发送请求就可以了。 - Tuhalang
你能添加发送请求所使用的代码吗?服务器在你的控制之下吗(例如,你知道它如何配置)? - Roddy of the Frozen Peas
2个回答

1
OkHttp会记住先前失败的路由,并在建立新连接时尝试其他路由。您的服务器可能可以通过多个路由访问。通常这是由于具有多个IP地址,但也可能是由于存在多个客户端代理而引起的。如果不同的路由具有不同的TLS设置,则可能会导致此行为。

哦,我认为这可能是由于多个客户端代理引起的。但您可以建议我如何记录OkHttp中使用的路由器? - Tuhalang

0

检查您的Java版本,如果它们最近更新或服务器之间存在不匹配,错误将显示为此。

运行以下命令以检查罪犯:

sudo java -version

//to check for updates
sudo yum history list
sudo yum history info ID_SUSPECTED_ON_LIST

只是想发布另一个答案,我没有看到提到的问题,结果在我的系统上出了问题。


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