본문 바로가기
infra/aws

[JAVA] AWS S3 Https 연결이 비공개로 설정되어 있지 않습니다. (Your connection is not private) 해결방안

by moonsiri 2020. 10. 31.
728x90
반응형

Https 연결 사용 시 서버 인증서가 필요합니다. 서버 인증서는 CA에서 서명한 x.509 v3 데이터 구조입니다.

서버 인증서에는 서버 이름, 유효 기간, 퍼블릭 키 및 기타 데이터가 포함됩니다.

브라우저가 웹 서버에 액세스하는 경우 모든 데이터 필드가 유효해야 합니다.

인증서가 만료되었거나 아래와 같이 인증서가 도메인에 대해 유효하지 않은 경우 ACM(AWS Certificate Manager) 인증서 오류 메시지가 표시됩니다.

연결이 비공개로 설정되어 있지 않습니다. (Your connection is not private)

 

서버의 보안 인증서가 *.s3.ap-northeast-2.amazonaws.com 에 대해 제공을 하는데, wildcard name (*)을 사용하면 하나의 하위 도메인과만 일치하기 때문에 https://moonsiri.s3.ap-northeast-2.amazonaws.com/ 은 보호하지만, https://moonsiri.com.s3.ap-northeast-2.amazonaws.com/ 은 보호할 수 없습니다.

위 문제를 JAVA에서 AmazonS3Client 구성 시 enablePathStyleAccess 설정을 통해 해결할 수 있습니다.

enablePathStyleAccess() 를 설정하면 모든 요청에 path-style 액세스가 사용됩니다.

 

@Configuration
public class AwsS3Configuration {

    /* V1 */
    @Bean
    public AmazonS3 amazonS3Client() {

        return AmazonS3ClientBuilder.standard()
                .withRegion(regions)
                .enablePathStyleAccess()  // 빌드 된 클라이언트에 대한 path-style 액세스 사용
                .build();
    }

    /* V2 */
    @Bean
    public S3AsyncClient amazonS3Client() {
    
        S3Configuration config = S3Configuration.builder().pathStyleAccessEnabled(true).build();  // 빌드 된 클라이언트에 대한 path-style 액세스 사용
        
        return S3AsyncClient.builder()
                .region(region)
                .serviceConfiguration(config)
                .build();
    }
}

 

이전에 Amazon S3는 모든 리전에서 virtual hosted-style(가상 호스팅 방식)과 path-style(경로 스타일 방식) 액세스를 지원했습니다.

※ 참고) 2020년 9월 30일 이후에 생성되는 버킷은 virtual hosted-style 요청만 지원합니다. 해당일 또는 이전에 생성된 버킷에 대해서는 path-style 방식이 계속 지원됩니다. 자세한 내용은 Amazon S3 홈페이지를 참조.

 

path-style URL은 다음 형식을 따릅니다.

  • https://s3.Region.amazonaws.com/bucket-name/key name

예를 들어 미국 서부(오레곤) 리전에서 이름이 moonsiri인 버킷을 생성하고 해당 버킷의 sample.jpg 객체에 액세스하려는 경우 다음 path-style URL을 사용할 수 있습니다.

  • https://s3.us-west-2.amazonaws.com/moonsiri/sample.jpg

하지만, path-style 구문에서 버킷에 액세스할 때 region-specific 엔드 포인트를 사용해야 합니다.

기본 동작은 구성된 엔드 포인트 (IP로 인해 path-style 액세스가 발생) 및 버킷이 액세스 되는 버킷(일부 버킷은 유효한 DNS 명이 아님)을 기반으로 사용할 액세스 style을 감지하는 것입니다.

즉, https://moonsiri.com.s3.ap-northeast-2.amazonaws.com 도메인이 https://s3.ap-northeast-2.amazonaws.com 으로 변경되어 서버의 보안 인증서가 도메인에 대해 유효해집니다.

 

기타 문제는 아래 URL을 통해 해결하길 바랍니다.

https://aws.amazon.com/premiumsupport/knowledge-center/acm-certificate-error-https/

 

HTTPS 연결 사용 시 ACM 인증서 오류 메시지 문제 해결

HTTPS 연결을 사용하는 경우 서버 인증서가 필요합니다. 서버 인증서는 CA(인증 기관)에서 서명한 x.509 v3 데이터 구조입니다. 서버 인증서에는 서버 이름, 유효 기간, 퍼블릭 키 및 기타 데이터가

aws.amazon.com

 

 

728x90
반응형

댓글