【问题标题】:Handshake fail on Lollipop棒棒糖握手失败
【发布时间】:2015-05-22 21:50:48
【问题描述】:
我正在尝试执行 HTTP POST,但出现两个不同的错误:
javax.net.ssl.SSLHandshakeException: Handshake failed
net.ssl.SSLPeerUnverifiedException: No peer certificate
我通过此处指定的解决方法修复了 No peer certificate 错误:https://stackoverflow.com/a/4837230/4254419
虽然这修复了错误,但它会引发一个新错误,即 Handshake failed
我知道它不安全,我不在乎,它不是用于生产的,所以我不太关心安全性。这个问题有解决办法吗?
【问题讨论】:
标签:
java
android
ssl
apache-httpclient-4.x
sslhandshakeexception
【解决方案1】:
我遇到了同样的问题。
我找到了一个链接https://code.google.com/p/android/issues/detail?id=88313,在那里我找到了一个代码:
public class MySSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
...
@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
final SSLSocket sslSocket = (SSLSocket) sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
sslSocket.setEnabledCipherSuites(sslSocket.getSupportedCipherSuites());
return sslSocket;
}
@Override
public Socket createSocket() throws IOException {
final SSLSocket sslSocket = (SSLSocket) sslContext.getSocketFactory().createSocket();
sslSocket.setEnabledCipherSuites(sslSocket.getSupportedCipherSuites());
return sslSocket;
}
}
您可以使用您提供的链接中的MySSLSocketFactory 代码,但您需要覆盖两个方法createSocket,正如我在上面所写的。
此外,这也不是您以后可能会遇到一些安全问题的最佳解决方案,因为它可以使用一些旧的密码算法进行连接。
希望这会有所帮助。