sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 안드로이드 스튜디오
  • 고득점 Kit
  • 알고리즘
  • 고득점KIT
  • kotlin
  • 연습문제
  • nginx
  • mariadb
  • java
  • 프로그래머스
  • DB
  • 레벨3
  • 레벨2
  • spring boot
  • Android Studio
  • 오블완
  • 백준
  • JPA
  • 티스토리챌린지
  • docker

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Spring Boot

[Spring Boot] s3 aws-java-sdk(v 1.1) 을 사용하는 개발환경에서 SSL 인증서와 무관하게 통신하는 방법(feat. ValidatorException: PKIX path building failed)

2023. 5. 23. 00:45
728x90

발단

개발 환경에서 object storage 에 접근할 때 SSL 인증서 이슈로 임시로 https 를 허용해야 하는 상황이 발생하였다.

 

PKIX(Public Key Infrastructure X.509) 오류

PKIX : 인증서 기반의 보안 인프라
  • 오류 발생 경우
    • 일반적으로 신뢰할 수 없는 인증 기관에 의한 발급
    • 인증서의 유효 기간이 만료
    • 도메인 이름과 일치하지 않는 경우
    • 혹은, Java 의 신뢰할 수 있는 인증서 리스트에 등록한 인증서가 없는 경우

코드

/**
 * 설명
 * - AmazonS3 클라이언트를 구성하는 코드입니다.
 * */
AmazonS3ClientBuilder.standard()
    .withEndpointConfiguration(
        ...
    )
    .withClientConfiguration(
        ClientConfiguration().apply {

            /**
             * 설명
             * - 임시로 SSL 인증서를 무시하고 통신하도록 설정합니다.
             * */
            val sslContextBuilder: SSLContextBuilder = SSLContextBuilder.create()
            sslContextBuilder.loadTrustMaterial { chain, authType -> true }
            val sslConnectionSocketFactory = SSLConnectionSocketFactory(
                sslContextBuilder.build(),
                NoopHostnameVerifier.INSTANCE
            )

            apacheHttpClientConfig.withSslSocketFactory(
                sslConnectionSocketFactory
            )
        }

    )
    .withCredentials(
        ..
    )
    .build()
  • AmazonS3 Client 를 생성할 때, ClientConfiguration 의 옵션을 조정
    • ClientConfiguration 은 내부적으로 ApacheHttpClientConfig 를 통신시 사용
      • ApacheHttpClientConfig 의 withSslScoketFactory 함수를 통해 SSL 인증서 를 무시하고 통신하게끔 수정

 

해결

위 코드는 개발환경이라는 특수한 경우에만 적용되어야 합니다. 보안상의 위험이 있을 수 있음으로, 통신이 되는지 여부만을 확인하고 신뢰할 수 있는 인증서를 등록하는 것이 중요합니다.

 

728x90

'Spring Boot' 카테고리의 다른 글

[Spring Boot] custom error page 적용(feat. 예제, ErrorController)  (0) 2023.05.26
[Spring Boot] JWT 라이브러리를 의존성 추가했음에도 빌드 오류가 나는건 왜일까?(feat. `io.jsonwebtoken:jjwt-api`)  (2) 2023.05.25
[Spring Boot] Spring Boot 에서 JPA 로 값을 수정시 알 수 없는 이유로 sql 에러가 발생할 때(feat. SQL Error: 1064, SQLState: 42000)  (0) 2023.05.20
[Spring Boot] Spring Boot(Kotlin) Gradle 환경에서 docker 이미지를 추출하는 방법(feat. bootBuildImage)  (0) 2023.05.18
[Spring Boot] RestTemplate 으로 ASP.Net 서버와 통신하려 할 때 특정 field 가 전송되지 않는 이슈(feat. Gson)  (0) 2023.05.14
    'Spring Boot' 카테고리의 다른 글
    • [Spring Boot] custom error page 적용(feat. 예제, ErrorController)
    • [Spring Boot] JWT 라이브러리를 의존성 추가했음에도 빌드 오류가 나는건 왜일까?(feat. `io.jsonwebtoken:jjwt-api`)
    • [Spring Boot] Spring Boot 에서 JPA 로 값을 수정시 알 수 없는 이유로 sql 에러가 발생할 때(feat. SQL Error: 1064, SQLState: 42000)
    • [Spring Boot] Spring Boot(Kotlin) Gradle 환경에서 docker 이미지를 추출하는 방법(feat. bootBuildImage)
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바