相关疑难解决方法(0)

使用okHttp信任所有证书

出于测试目的,我正在尝试将套接字工厂添加到我的okHttp客户端,该客户端在设置代理时信任所有内容.这已经完成了很多次,但是我对一个信任套接字工厂的实现似乎缺少了一些东西:

class TrustEveryoneManager implements X509TrustManager {
    @Override
    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }

    @Override
    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { }

    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}
OkHttpClient client = new OkHttpClient();

final InetAddress ipAddress = InetAddress.getByName("XX.XXX.XXX.XXX"); // some IP
client.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ipAddress, 8888)));

SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = new TrustManager[]{new TrustEveryoneManager()};
sslContext.init(null, trustManagers, null);
client.setSslSocketFactory(sslContext.getSocketFactory);
Run Code Online (Sandbox Code Playgroud)

没有请求从我的应用程序发出,并且没有异常被记录,因此它似乎在okHttp中无声地失败.经过进一步调查,似乎Connection.upgradeToTls()在强制握手时,okHttp中有一个异常被吞没.我得到的例外是:javax.net.ssl.SSLException: SSL handshake terminated: ssl=0x74b522b0: SSL_ERROR_ZERO_RETURN occurred. You …

ssl android android-networking okhttp

95
推荐指数
6
解决办法
8万
查看次数

以编程方式记录SSL证书

我有两个无法连接到我的TLS v1.2端点的设备.所有其他人似乎都能够,包括浏览器,PostMan和iOS设备.

这些设备运行的是Android 5和7(因此TLS v1.2支持应该没有问题).

注意:这不是自签名证书.它由亚马逊签署.

直接的想法是:

  1. Android碎片 - 也许设备(一个是Kindle Fire 7)不包括正确的证书进入操作系统.这可能不是设备制造商第一次做出破坏功能的奇怪决定.

  2. API正在通过代理进行访问,实际上一个正在检测的Man-In-The-Middle.


修复(1)意味着捆绑我们的证书,并在我们的证书到期时导致通常的问题.

我希望让用户安装一个调试版本,确认(1)或(2)是否是问题.这样的构建将检查服务器/代理提供的SSL证书,并将其记录回给我.


网站框架:

  • 改造v2.3.0
  • OkHttp v3.9.1

题:

如何检查设备在访问端点时看到的SSL证书信息?


来自@SangeetSuresh的每条评论更新:

事实证明,有两种不同的例外被抛出.

Kindle Fire 7"平板电脑(KFAUWI,OS 5.1.1)正在抛弃我已经开始调查的问题,这个问题应该集中在这个问题上,即基本的SSL故障.

java.security.cert.CertPathValidatorException: 
    Trust anchor for certification path not found.
       at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:331)
       at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:232)
       at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:114)
Run Code Online (Sandbox Code Playgroud)

LG设备(LG-SP200,OS 7.1.2)正在通过对等方关闭连接,如果在此处未解决,则应在新问题下解决:

javax.net.ssl.SSLHandshakeException: 
    Connection closed by peer
       at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(NativeCrypto.java)
       at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:360)
       at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:299)
Run Code Online (Sandbox Code Playgroud)

android ssl-certificate

6
推荐指数
1
解决办法
391
查看次数