【问题标题】:Socket Handshake in Android < 5.0 (Lollipop) with TLSv1.2 problem带有 TLSv1.2 问题的 Android < 5.0 (Lollipop) 中的套接字握手
【发布时间】:2020-04-13 23:28:15
【问题描述】:

我使用下面的代码创建一个到服务器的套接字并获取服务器公钥(服务器 TLS 版本是 1.2)。
问题出在 Android socket.startHandshake();

catch error : javax.net.ssl.SSLException: Connection closed by peer.

我搜索了很多,发现我必须强制 Android +、++)。

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, 443);
socket.setSoTimeout(10000);
socket.startHandshake();
Certificate[] certs = socket.getSession().getPeerCertificates();
Certificate cert = certs[0];
PublicKey serverKey = cert.getPublicKey();

CertificateFactory cf      = CertificateFactory.getInstance("X.509");
InputStream        caInput = context.getResources().getAssets().open("filename.cert");
Certificate        ca;
ca = cf.generateCertificate(caInput);

if (String.valueOf(serverKey).equals(String.valueOf(ca.getPublicKey()))) {
     My codes ...
}

我该怎么做?谢谢。

【问题讨论】:

    标签: java android sockets ssl tls1.2


    【解决方案1】:

    您应该像这样在 Android KitKat 及以下版本上强制使用 TLSv1.2:

    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
        socket.setEnabledProtocols(new String[]{"TLSv1.2"});
    }
    

    https://developer.android.com/reference/javax/net/ssl/SSLSocket.html

    干杯!

    【讨论】:

    • 我这样做了,但发生了这个错误:javax.net.ssl.SSLException: Connection closed by peer 12-22 11:54:26.970 3741-3762/ir.refahotp.refahotp W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 12-22 11:54:26.970 3741-3762/ir.refahotp.refahotp W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:405)
    • 你在哪个安卓版本上运行它?请注意,仅 Android 4.1+ (JellyBean) 支持 v1.2。
    • 服务器一切正常
    • 我用的是安卓4.4
    • 您能否确认该问题不是由以下任何原因引起的: 1. 颁发服务器证书的 CA 未知 2. 服务器证书不是由 CA 签名的,而是自己的签名 3. 服务器配置缺少中间 CA
    【解决方案2】:

    最后,我必须将服务器 SSL 降级到 TLSv1 并修复问题。

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 2018-09-19
      • 2015-02-21
      • 2015-01-15
      • 1970-01-01
      • 2017-11-23
      • 2015-05-13
      • 1970-01-01
      相关资源
      最近更新 更多