使用客户端证书和Retrofit进行SSL握手失败

时间:2016-02-11 15:30:09

标签: android apache retrofit okhttp tls1.2

我有一个客户端 - 服务器应用程序(Android客户端,Apache Http服务器)通过相互身份验证(TLS 1.2)进行通信。问题:有时连接(登录)失败并出现SSL错误。

这有效:

  1. 注册客户端证书
  2. 登录
  3. 工作:

    1. 注册客户端证书
    2. 登录
    3. 删除客户端证书
    4. 注册(“相同”)客户证书
    5. 登录
    6. 注意:在步骤4之后杀死应用程序,然后启动它并执行第5步。

      我能想到的可能解释:

      1. 重用某些旧资源(如旧客户端证书)。 它看起来像所有相关的(OkHttpClient等)按预期重新实例化。
      2. SSL重新协商使用新凭据时,这可能会被破坏?有没有办法禁用它?
      3. Android(客户端)日志:

        02-11 15:58:29.827 21352-23374/com.mycompany E/com.mycompany.Connection﹕ ERROR Read error: ssl=0x99116c00: Failure in SSL library, usually a protocol error error:1409441B:SSL routines:SSL3_READ_BYTES:tlsv1 alert decrypt error (external/openssl/ssl/s3_pkt.c:1303 0x9928fa60:0x00000003) error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure (external/openssl/ssl/s3_pkt.c:1036 0xa613bcc5:0x00000000) retrofit.RetrofitError: Read error: ssl=0x99116c00: Failure in SSL library, usually a protocol error error:1409441B:SSL routines:SSL3_READ_BYTES:tlsv1 alert decrypt error (external/openssl/ssl/s3_pkt.c:1303 0x9928fa60:0x00000003) error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure (external/openssl/ssl/s3_pkt.c:1036 0xa613bcc5:0x00000000)

        服务器日志:

        [Thu Feb 11 14:58:16.736172 2016] [ssl:error] [pid 4424:tid 2088] [client 194.161.218.157:36836] AH02261: Re-negotiation handshake failed [Thu Feb 11 14:58:16.736172 2016] [ssl:error] [pid 4424:tid 2088] SSL Library Error: error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01 [Thu Feb 11 14:58:16.736172 2016] [ssl:error] [pid 4424:tid 2088] SSL Library Error: error:04067072:rsa routines:RSA_EAY_PUBLIC_DECRYPT:padding check failed [Thu Feb 11 14:58:16.736172 2016] [ssl:error] [pid 4424:tid 2088] SSL Library Error: error:1408807B:SSL routines:ssl3_get_cert_verify:bad signature [Thu Feb 11 14:59:24.655282 2016] [ssl:error] [pid 4424:tid 2088] [client 194.161.218.157:34530] AH02261: Re-negotiation handshake failed [Thu Feb 11 14:59:24.655282 2016] [ssl:error] [pid 4424:tid 2088] SSL Library Error: error:04067084:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data too large for modulus [Thu Feb 11 14:59:24.655282 2016] [ssl:error] [pid 4424:tid 2088] SSL Library Error: error:1408807B:SSL routines:ssl3_get_cert_verify:bad signature

        我的设置:
        Android版 5.1.1
        改装版 1.9.0
        OkHttp版本 2.7.2
        Apache HTTP服务器版本 2.4.17

        任何可能出错的线索或建议如何做到这一点?

1 个答案:

答案 0 :(得分:0)

我没有在其余的适配器上显式设置ConnectionPool,从而绕过了这个问题(因此,重复使用默认的实例)。