我正在尝试进行HTTP POST,但出现两个不同的错误:
javax.net.ssl.SSLHandshakeException: Handshake failed
net.ssl.SSLPeerUnverifiedException: No peer certificate
我通过此处指定的解决方法解决了“无对等证书”错误:https://stackoverflow.com/a/4837230/4254419
但是虽然可以修复错误,但会引发一个新错误,即握手失败
我知道这不安全,我不在乎,它不是用于生产的,所以我不太关心安全性。有解决此问题的方法吗?
最佳答案
我有同样的问题。
我找到了链接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
。同样,它并不是最好的解决方案,以后您可能会遇到一些安全问题,因为对于连接而言,它可以使用一些旧的密码算法。
希望这可以帮助。