首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android异常:点对点重置连接,在Lollipop设备上使用ksoap

Android异常:点对点重置连接,在Lollipop设备上使用ksoap
EN

Stack Overflow用户
提问于 2015-04-14 10:36:55
回答 2查看 1.1K关注 0票数 0

我在使用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支持的现代密码套件来解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2015-06-22 10:59:04

我也有同样的问题。我找到了一个链接https://code.google.com/p/android/issues/detail?id=88313,在这里我找到了一个代码:

代码语言:javascript
复制
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。而且这也不是最好的解决办法。稍后您可能会遇到一些安全问题,因为对于连接,它可以使用一些旧的密码算法。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-07-20 14:27:24

我也遇到了同样的问题,我写了SSL_RSA_WITH_3DES_EDE_CBC_SHA而不是TLS_RSA_WITH_3DES_EDE_CBC_SHA,这对我很有用。

您可以检查这个SHA

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29625197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档