我手上有一个Android应用,目标是SDK 21级。在这方面,我试图使用AWS‘alive.json连接到java.net.HttpURLConnection。
信任链看起来是这样的:
我的AndroidManifest.xml以<uses-permission android:name="android.permission.INTERNET"/>为特色。
代码可以归结为以下几点。它在一个单独的线程上被调用(这个线程一个一个地执行请求--目前只有这个线程),它来自NDK。
// init() -- all optional
System.setProperty("http.keepAlive", "false");
HttpURLConnection.setDefaultAllowUserInteraction(false);
// makeRequest(HttpRequest request)
URL url = new URL(request.url);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setUseCaches(false);
http.setReadTimeout(timeoutMs);
http.setChunkedStreaingMode(0); // optional
http.setDoInput(true);
http.setRequestMethod("GET"); // optional
http.setRequestProperty("X-Correlation-ID", x); // optional
http.connect();现在,如果我将超时设置为80 an,我将得到一个javax.net.ssl.SSLHandshakeException: SSL handshake timed out。除此之外(800毫秒),它将永远挂在http.connect()。
https://developer.android.com/training/articles/security-ssl.html#HttpsExample和周围的文章详细介绍了应该如何做到这一点。我的理解是,我不应该需要证书钉在这个练习。
如果我添加了一个(按照上面文章的思路),我就会得到一个javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.。
连接到http:// resource可以正常工作。
我做错了什么?我需要什么额外的配置,为什么?
更新:
1、基于OkHttp的实现表现出完全相同的行为。
2、证书钉扎没有帮助回避这一问题。请注意,这只是一个绝望的措施,而不是什么生产-显然,我们不想打破当亚马逊的证书得到更新。
发布于 2017-10-04 13:52:30
哦哦。不要在Android上这样做;使用http://s3.us-east-2.amazonaws.com/static-us-east/alive.json,而不是https://。
https://stackoverflow.com/questions/46321268
复制相似问题