2015-01-22 2 views
4

버킷 목록을 검색하는 데 사용되는 기본 Amazon S3 SDK 코드 스 니펫이 있습니다. 서버는 TLSv1.2 만 수락하도록 구성됩니다. TLS v1.2 요청을 보내도록 클라이언트를 구성 할 수 없습니다. 디버깅은 클라이언트가 항상 TLSv1을 보내고 있음을 보여줍니다. 시스템 속성 설정을 시도했지만 그 중 하나가 작동하지 않습니다.Java 용 Amazon S3 SDK - TLSv1.2 구성

-Dhttps.protocols = TLSv1.2

 BasicAWSCredentials credentials = new BasicAWSCredentials(username,password); 

     AmazonS3 s3 = new AmazonS3Client(credentials); 
     final String serviceurl = "https://ip:port"; 
     s3.setEndpoint(serviceurl); 
     S3ClientOptions s3ClientOptions = new S3ClientOptions(); 
     s3ClientOptions.setPathStyleAccess(false); 
     s3.setS3ClientOptions(s3ClientOptions); 

     for (Bucket bucket: s3.listBuckets()) { 
      System.out.println("Bucket name::" + bucket.getName()); 
     } 

내가 무슨 말이냐? TLSv1.2 요청을 항상 보내도록 코드를 구성하려면 어떻게해야합니까? AWS SDK 1.7.25를 사용하고 있습니다. 당신의 도움을 주셔서 감사합니다.

답변

3

Version 1.9.4 of the AWS Java SDK made TLSv1.2 the default.

그러나 버전 1.9.14 (code here)까지 열거 형으로 존재하지 않았습니다. 해당 버전 을 최소으로 사용하는 것이 좋습니다.

나는이 정보를 주입하는 것이 가능하다고 믿지만, 많은 노력이 필요합니다. 아마 여기에 조금 누락 :

import org.apache.http.conn.ssl.SSLSocketFactory; 
import com.amazonaws.ApacheHttpClientConfig; 
import com.amazonaws.ClientConfiguration; 

SSLContext ctx = SSLContext.getInstance("TLSv1.2"); 
SSLSocketFactory socketFactory = ctx.engineGetSocketFactory(); 

ClientConfiguration client = new ClientConfiguration(); 
ApacheHttpClientConfig apacheClient = client.getApacheHttpClientConfig(); 
SSLSocketFactory socketContext = apacheClient.getSslSocketFactory(); 
apacheClient.setSslSocketFactory(socketFactory); 

소스를 주사에 대해 : 아마존 SDK에서

+1

이 문제의 근본 원인을 발견했습니다. Amazon S3 SDK는 -Dcom.amazonaws.sdk.disableCertChecking = true가 설정된 경우 항상 TLS를 사용합니다. 나는이 깃발을 사용하고 있었다. 내가 해체하면 TLSv1.2가 사용됩니다. – user3566773

0

는, 시스템 설정 속성을 거짓으로 변경

(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "false"); 

확인하면 내부적으로 com.amazonaws.sdk.disableCertChecking을 false로 설정합니다.

나는 비슷한 문제가있어서 같은 질문을 언급했다. user3566773이 작성한 의견은 나를 도왔으며, 따라서이 질문에 대답해야한다고 생각했습니다.

희망이 있습니다. !!!