Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


SSLException debido al elemento de carga para el servicio de Amazon

Cargo mi archivo en el servicio aws de android. Lo configuré de esta manera:

AwsMetadata awsMetadata = resultData.getParcelable(Params.CommandMessage.EXTRA_MESSAGE); AWSCredentials awsCredentials = new BasicAWSCredentials( awsMetadata.getAccountId(), awsMetadata.getSecretKey() ); // set up region TransferManager transferManager = new TransferManager(awsCredentials); Region region = Region.getRegion(Regions.fromName(awsMetadata.getRegionEndpoint())); transferManager.getAmazonS3Client().setRegion(region); final MediaItem mediaItem = datasource.get(0); Log.d(App.TAG, "File is exists: " + mediaItem.getContentUri() + " " + new File(mediaItem.getContentUri()).exists()); // prepare file for upload PutObjectRequest putObjectRequest = new PutObjectRequest( awsMetadata.getBucketName(), awsMetadata.getSecretKey(), new File(mediaItem.getContentUri()) ); Log.d(App.TAG, "Total data: " + mediaItem.getSize()); Upload upload = transferManager.upload(putObjectRequest, new S3ProgressListener() { private int totalTransfered = 0; @Override public void onPersistableTransfer(PersistableTransfer persistableTransfer) { } @Override public void progressChanged(ProgressEvent progressEvent) { Log.d(App.TAG, "Bytes are transferred: " + progressEvent.getBytesTransferred()); totalTransfered += progressEvent.getBytesTransferred(); long totalSize = mediaItem.getSize(); Log.d(App.TAG, "Total transferred: " + ((totalTransfered / totalSize) * 100) + " percent"); } }); } 

Y recibí SSLException:

  06-01 11:45:00.712 5182-5768/com.home I/AmazonHttpClient﹕ Unable to execute HTTP request: Write error: ssl=0xb4bb3600: I/O error during system call, Connection reset by peer javax.net.ssl.SSLException: Write error: ssl=0xb4bb3600: I/O error during system call, Connection reset by peer at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method) at com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:765) at com.android.okio.Okio$1.write(Okio.java:70) at com.android.okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:116) at com.android.okio.RealBufferedSink.write(RealBufferedSink.java:44) at com.android.okhttp.internal.http.HttpConnection$FixedLengthSink.write(HttpConnection.java:291) at com.android.okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:116) at com.android.okio.RealBufferedSink$1.write(RealBufferedSink.java:131) at com.amazonaws.http.UrlHttpClient.write(UrlHttpClient.java:155) at com.amazonaws.http.UrlHttpClient.createConnection(UrlHttpClient.java:143) at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:60) at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:353) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:196) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4234) at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1644) at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadCallable.uploadInOneChunk(UploadCallable.java:134) at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadCallable.call(UploadCallable.java:126) at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadMonitor.upload(UploadMonitor.java:182) at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadMonitor.call(UploadMonitor.java:140) at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadMonitor.call(UploadMonitor.java:54) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) 

Sucede en Android 4.3 y 4.4

 com.amazonaws.services.s3.model.AmazonS3Exception: There were headers present in the request which were not signed (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 06CAF94ADEFE242E), S3 Extended Request ID: ouMiu+15fshPnT9uz95T3Drj+Gea3gI1c+Rj34BhcSCzbIH2ypOeK9yvIlNCxbxt 

Amazon SDK utiliza su propio cliente y debe configurarse correctamente desde el cuadro.

¿Cuál es la razón de este beahaviour?

  • Android: SSLException Error de E / S durante la llamada al sistema, conexión agotada
  • Javax.net.ssl.SSLException durante la carga múltiple de Amazon S3
  • Excepción SSL cuando se utiliza Volley
  • 2 Solutions collect form web for “SSLException debido al elemento de carga para el servicio de Amazon”

    Hay un error en el SDK donde no se firman algunos encabezados. Esto afectará a S3 en algunas regiones, por ejemplo, Frankfurt (eu-central-1) y China (cn-north-1), donde se requiere sigv4.

    AWS SDK para Android v2.2.2 está fuera http://aws.amazon.com/releasenotes/4067314458888112 . Esta versión soluciona el problema de la firma sigv4 con S3. Compruébelo en http://aws.amazon.com/mobile/sdk/ .

    Yo estaba teniendo el mismo problema en Android cuando se trata de subir directamente desde el dispositivo a S3, y se relacionó con los problemas de diferencia de tiempo en los dispositivos, como dijo cutiko. Yo estaba usando la última versión de SDK disponible (2.3.3), por lo que la solución SDK mencionado realmente no solucionó mi problema.

    Lo que hice para resolverlo:

    • Llamar a un servicio externo que devuelve la hora UTC de un servidor AWS
    • Calcular la diferencia de tiempo entre la hora del dispositivo y el tiempo del servidor, tanto en UTC
    • Utilice s3Client.setTimeOffset () para establecer el sesgo de tiempo calculado antes (en segundos)

    Espero eso ayude.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.