javax.net.ssl.SSLPeerUnverifiedException:Android上没有对等证书,主要是AmazonS3
正如标题所示,我在日志中间歇性地看到“无对等证书”错误。我无法在本地复制这一点,这让我感到困惑,因为设备上发生了什么导致了这一点。请注意,它是间歇性的-有时发生在用户身上,有时不发生 这似乎主要发生在尝试上传到AmazonS3时,但偶尔也会发生在尝试访问我们的服务器进行身份验证或其他服务时。我们在Android上使用HttpClient(不是新的URLConnection)。我讨厌花很多时间切换(这将是一个很大的工作),并发现问题是其他东西 这种错误似乎更多地发生在一些用户身上,而且总体上频率也不高。在7天的时间里,大约有20名用户受到影响(数千名用户中有数千名请求) 我看过其他类似的帖子,但大多数帖子都一直在发生,或者希望您关闭SSL信任,而我不希望这样做。也许有人会发现这段代码有可疑之处(在整个代码库中使用了类似的模式)。注意:为了使代码更具可读性,我删掉了一些代码:javax.net.ssl.SSLPeerUnverifiedException:Android上没有对等证书,主要是AmazonS3,java,android,ssl,amazon-s3,Java,Android,Ssl,Amazon S3,正如标题所示,我在日志中间歇性地看到“无对等证书”错误。我无法在本地复制这一点,这让我感到困惑,因为设备上发生了什么导致了这一点。请注意,它是间歇性的-有时发生在用户身上,有时不发生 这似乎主要发生在尝试上传到AmazonS3时,但偶尔也会发生在尝试访问我们的服务器进行身份验证或其他服务时。我们在Android上使用HttpClient(不是新的URLConnection)。我讨厌花很多时间切换(这将是一个很大的工作),并发现问题是其他东西 这种错误似乎更多地发生在一些用户身上,而且总体上频率也
private static int TIMEOUT = 600000; // 10 minutes
public void mediaAmazonUploadFile(JSONObject authParams, String formMediaDirectory, String filename, boolean publicRead) {
String url = "";
String accessKey = "";
String policy = "";
String signature = "";
String contentType = "";
String key = filename;
String acl = "private";
url = authParams.optString("mediaUrl");
accessKey = authParams.optString("mediaAccessKey");
policy = authParams.optString("mediaPolicy");
signature = authParams.optString("mediaSignature");
contentType = authParams.optString("contentType");
if (publicRead)
acl = "public";
File file = new File(formMediaDirectory, filename);
if (file.exists()) {
// Try 2 times to send the file if failure. Hold connection 7 secs and socket 7 secs
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
DefaultHttpRequestRetryHandler retryhandler = new DefaultHttpRequestRetryHandler(RETRIES, true);
httpClient.setHttpRequestRetryHandler(retryhandler);
HttpPost postMethod = new HttpPost(url);
MultipartEntity entity = new MultipartEntity();
try {
entity.addPart("AWSAccessKeyId", new StringBody(accessKey));
entity.addPart("Content-Type", new StringBody(contentType));
entity.addPart("policy", new StringBody(policy));
entity.addPart("key", new StringBody(key));
entity.addPart("acl", new StringBody(acl));
entity.addPart("signature", new StringBody(signature));
entity.addPart("file", new FileBody(file));
postMethod.setEntity(entity);
HttpResponse response = httpClient.execute(postMethod);
}
catch (HttpResponseException re) {
Utilities.logException(re);
}
catch (ClientProtocolException cpe) {
Utilities.logException(cpe);
}
catch (Exception e) {
Utilities.logException(e);
}
}
else {
Utilities.logError("mediaAmazonUploadFile(), file not created ");
}
}r