握手在棒棒糖上失败

时间:2015-03-19 16:48:29

标签: java android ssl apache-httpclient-4.x sslhandshakeexception

我正在尝试进行HTTP POST,但我遇到两个不同的错误:

javax.net.ssl.SSLHandshakeException: Handshake failed
net.ssl.SSLPeerUnverifiedException: No peer certificate

我通过此处指定的解决方法修复了无对等证书错误:https://stackoverflow.com/a/4837230/4254419

但是虽然修复了错误,但它会引发新的错误,这是握手失败

我知道这不安全而且我不在乎,这不是为了生产所以我更不关心安全性。是否有解决此问题的方法?

1 个答案:

答案 0 :(得分: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,如上所述。 此外,它不是最佳解决方案,您可以在以后遇到一些安全问题,因为对于连接,它可以使用一些旧的密码算法。

希望这有帮助。