我在使用Lollipop设备使用ksoap库连接https站点时遇到了问题。我得到了SSLHandshake异常:由Peer重置连接。我注意到Android5.0在TLS/SSL配置上有更改,他们的站点it状态
现在启用了TLSv1.2和TLSv1.1协议,现在启用了AES-GCM (AEAD)密码套件,现在禁用了MD5、3 3DES、导出和静态密钥ECDH密码套件,首选前向保密密码套件(ECDHE和DHE)。
我检查服务器,它使用TLS_RSA_WITH_3DES_EDE_CBC_SHA作为密码套件,这是Android5.0不支持的
我尝试使用此链接上的解决方案来接受所有证书:KSOAP 2 Android with HTTPS
并使自定义SSLSocketFactory仅启用预加密套件:How to override the cipherlist sent to the server by Android when using HttpsURLConnection?
没有成功,我得到了一个错误"TLS_RSA_WITH_3DES_EDE_CBC_SHA是不支持的“
有什么办法可以在客户端解决这个问题,因为我知道可以通过升级服务器来添加Android 5支持的现代密码套件来解决这个问题。
发布于 2015-06-22 10:59:04
我也有同样的问题。我找到了一个链接https://code.google.com/p/android/issues/detail?id=88313,在这里我找到了一个代码:
public class MySSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public MySSLSocketFactory() throws UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
super(null, null, null, null, null, null);
final TrustManagerFactory trustMgrFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustMgrFactory.init((KeyStore) null);
sslContext.init(null, trustMgrFactory.getTrustManagers(), new SecureRandom());
}
@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;
}
}正如我前面所写的,您可以尝试使用自定义SSlSocketFactory。而且这也不是最好的解决办法。稍后您可能会遇到一些安全问题,因为对于连接,它可以使用一些旧的密码算法。
希望这能有所帮助。
发布于 2015-07-20 14:27:24
我也遇到了同样的问题,我写了SSL_RSA_WITH_3DES_EDE_CBC_SHA而不是TLS_RSA_WITH_3DES_EDE_CBC_SHA,这对我很有用。
您可以检查这个SHA
https://stackoverflow.com/questions/29625197
复制相似问题