2016-04-08 26 views
0

AndroidのHttpURLConnectionを使用してAmazon S3サーバーからファイルをダウンロードしようとしていますが、SSLExceptionを取得しようとしています。私たちのサーバーは、Nginxの背後にあるNode.jsサーバー(Hapi)です。アプリケーションは、S3サーバ上のリソースの署名付きURLに302リダイレクトを返す私たちのサーバからファイルを要求します。リダイレクトで応答のためのコードは次のとおりです。(同じ問題がまたのHttpClientで発生)、私が手のHttpURLConnectionを使ってHttpURLConnection AWS署名付きURLリダイレクトでSSLハンドシェイクが中止されました

 var params = { 
      Bucket: bucketID, 
      Key: fullPath 
     }; 
     var s3 = new AWS.S3({ apiVersion: '2006-03-01' }); 
     s3.getSignedUrl('getObject', params, function (err, url) 
     { 
      if (err || !url) 
      { 
       return reply(Boom.notFound()); 
      } 

      return reply.redirect(url); 

     }); 

がブラウザを使用したり、カールが正常に動作し、正しくS3にリダイレクトしてファイルをダウンロードしますが、Android上でSSLException:

javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x7148d680: I/O error during system call, Connection reset by peer 

何が原因なのでしょうか?

答えて

0

心配しないでください - アプリでサポートされているTLSバージョンとサーバーでサポートされているバージョンとの間に不一致がありました。サーバーはTLSv1.1とTLSv1.2用に設定されていますが、私はデフォルトでHttpURLConnectionとHttpClientがTLSv1.0用に設定されていると推測しています。私はHttpClientに変更したので、次のコードを追加して問題を解決しました。

 SSLContext sslContext = SSLContexts.createDefault(); 
     SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, 
                      new String[]{"TLSv1.1", "TLSv1.2"}, 
                      null, 
                      new NoopHostnameVerifier()); 
     CloseableHttpClient client = HttpClientBuilder.create() 
       .setDefaultCookieStore(cookieStore) 
       .setSSLSocketFactory(sslConnectionSocketFactory) 
       .build(); 
関連する問題