我正在尝试使用Android的HttpURLConnection从Amazon S3服务器下载文件,但是获得了SSLException。我们的服务器是在Nginx后面运行的Node.js服务器(Hapi)。应用程序从我们的服务器请求该文件,该服务器回复302重定向到S3服务器上资源的签名URL。使用重定向回复的代码是:
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);
});
使用浏览器或curl工作正常并正确地重定向到S3并下载文件,但在Android上使用HttpURLConnection(HttpClient也会出现同样的问题),我得到一个SSLException:
javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x7148d680: I/O error during system call, Connection reset by peer
知道可能导致这种情况的原因吗?
答案 0 :(得分:0)
没关系 - 这是应用程序支持的TLS版本与服务器支持的TLS版本之间的不匹配。服务器设置为TLSv1.1和TLSv1.2,我猜测默认HttpURLConnection和HttpClient是为TLSv1.0设置的。我改为HttpClient,因此添加以下代码解决了这个问题:
78.311333