Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 到AWS/alive.json的Android HTTPS连接挂起_Java_Android_Ssl_Https - Fatal编程技术网

Java 到AWS/alive.json的Android HTTPS连接挂起

Java 到AWS/alive.json的Android HTTPS连接挂起,java,android,ssl,https,Java,Android,Ssl,Https,我手上有一个Android应用程序,目标是SDK级别21。在这里,我试图使用java.net.HttpURLConnection连接到 信任链看起来是这样的: 巴尔的摩CyberTrust根目录(受开发设备信任) DigiCert Baltimore CA-2 G2(开发设备信任DigiCert保证ID根G2、全局根CA、全局根G2以及其他DigiCert-这足够吗?) AWS(*.us-east-etc.amazonaws.com) My AndroidManifest.xml功能 代码[

我手上有一个Android应用程序,目标是SDK级别21。在这里,我试图使用
java.net.HttpURLConnection
连接到

信任链看起来是这样的:

  • 巴尔的摩CyberTrust根目录(受开发设备信任)
  • DigiCert Baltimore CA-2 G2(开发设备信任DigiCert保证ID根G2、全局根CA、全局根G2以及其他DigiCert-这足够吗?)
  • AWS(*.us-east-etc.amazonaws.com)
My AndroidManifest.xml功能

代码[归结起来]如下。它由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();
现在,如果我将超时设置为80ms,我将得到一个
javax.net.ssl.SSLHandshakeException:ssl握手超时
。除此之外(800毫秒),它将永远挂在
http.connect()

周围的文章详细介绍了应该如何做到这一点。我的理解是,我不需要在这个练习中使用证书固定

如果我添加了一个(按照上面文章的思路),我会得到一个
javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trust anchor for certification path not found.

连接到http://resource工作正常

我做错了什么?我需要什么额外的配置?为什么

更新:

1、基于OkHttp的实现表现出完全相同的行为


2、没有帮助回避这个问题。请注意,这只是一个不顾一切的措施,而不是生产方面的措施——显然,我们不想在亚马逊证书更新时被破坏。

D'oh。(在Android上)不要这样做;使用
http://s3.us-east-2.amazonaws.com/static-us-east/alive.json
,而不是
https://

D'oh。(在Android上)不要这样做;使用
http://s3.us-east-2.amazonaws.com/static-us-east/alive.json
,而不是
https://

您是否已经检查了您报告的链接上报告的3个可能的问题?在我看来,这是错误的,我不需要自定义SSL配置。FWIW,我查过了。从上面的信任链中,我得出结论,它不是#1。但是,我使用了自签名证书(不应该使用),这可能会导致#2#3--
openssl s_客户端-connect s3.us-east-2.amazonaws.com:443
给了我,我的设备信任巴尔的摩CyberTrust Root。这并不能解释问题。你用过这些CA证书吗?在这种情况下,可能有1个问题?“这可能是因为您拥有一个新CA颁发的证书,该证书尚未被Android信任。”。我想不出另外一个原因了谢谢你的帮助。TBH,这是我第一次在这个级别上讨论SSL证书。巴尔的摩CyberTrust根是一个系统受信任的凭据。DigiCert Baltimore CA-2 G2不是,只是OP.Btw中提到的那些近距离匹配——在同一台设备上的Chrome浏览器中输入相同的地址可以很好地下载文件,这是我认为系统的受信任证书不会有问题的另一个原因。您是否已经检查了您报告的链接上报告的3个可能问题?在我看来,这是错误的,我不需要自定义SSL配置。FWIW,我查过了。从上面的信任链中,我得出结论,它不是#1。但是,我使用了自签名证书(不应该使用),这可能会导致#2#3--
openssl s_客户端-connect s3.us-east-2.amazonaws.com:443
给了我,我的设备信任巴尔的摩CyberTrust Root。这并不能解释问题。你用过这些CA证书吗?在这种情况下,可能有1个问题?“这可能是因为您拥有一个新CA颁发的证书,该证书尚未被Android信任。”。我想不出另外一个原因了谢谢你的帮助。TBH,这是我第一次在这个级别上讨论SSL证书。巴尔的摩CyberTrust根是一个系统受信任的凭据。DigiCert Baltimore CA-2 G2不是,只是OP.Btw中提到的那些近距离匹配——在同一台设备上的Chrome中输入相同的地址可以很好地下载文件,这也是我认为系统的可信证书不会有问题的另一个原因。