Ошибка рукопожатия на Lollipop

Я пытаюсь выполнить HTTP POST, но получаю две разные ошибки:

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

Я исправил ошибку Нет однорангового сертификата с помощью обходного пути, как указано здесь: https://stackoverflow.com/a/4837230/4254419

но хотя это и устраняет ошибку, вместо этого выдается новая ошибка, а именно Ошибка рукопожатия.

Я знаю, что это небезопасно, и мне все равно, это не для производства, поэтому я меньше забочусь о безопасности. Есть ли решение этой проблемы?


person SomeProgrammer123    schedule 19.03.2015    source источник


Ответы (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, как я написал выше. Также это не лучшее решение, у вас могут возникнуть проблемы с безопасностью позже, потому что для соединения может использоваться какой-то старый алгоритм шифрования.

Надеюсь это поможет.

person Orest    schedule 09.06.2015