我正在尝试进行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
同样,它并不是最好的解决方案,以后您可能会遇到一些安全问题,因为对于连接而言,它可以使用一些旧的密码算法。

希望这可以帮助。

09-28 13:34