使用ksoap库使用Lollipop Android设备连接到https网站时出现问题。我收到SSLHandshake异常:连接重置为同行。我注意到Android 5.0在TLS / SSL配置上有更改,在其站点上显示
现在启用了TLSv1.2和TLSv1.1协议, AES-GCM(AEAD)密码套件现已启用, MD5,3DES,导出和静态密钥ECDH密码套件现已禁用, 优先使用Forward Secrecy密码套件(ECDHE和DHE)。
我检查服务器,它使用TLS_RSA_WITH_3DES_EDE_CBC_SHA作为Android 5.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支持的现代密码套件来解决。
答案 0 :(得分:0)
我遇到了同样的问题。我找到了一个链接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
。它也不是最好的解决方案。稍后您可能会遇到一些安全问题,因为对于连接,它可以使用一些旧的密码算法。
希望这有帮助。
答案 1 :(得分:0)
我遇到了同样的问题,我写了SSL_RSA_WITH_3DES_EDE_CBC_SHA而不是TLS_RSA_WITH_3DES_EDE_CBC_SHA这对我有用。
您可以查看Is TLS_RSA_WITH_3DES_EDE_CBC_SHA equivalent to SSL_RSA_WITH_3DES_EDE_CBC_SHA