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 인증서 를 무시하고 통신하게끔 수정
- ClientConfiguration 은 내부적으로 ApacheHttpClientConfig 를 통신시 사용
해결
위 코드는 개발환경이라는 특수한 경우에만 적용되어야 합니다. 보안상의 위험이 있을 수 있음으로, 통신이 되는지 여부만을 확인하고 신뢰할 수 있는 인증서를 등록하는 것이 중요합니다.
728x90