크롬 엔진을 사용하는 환경에서 현재 도메인에서 다른 도메인으로 이동하거나 데이터를 송수신 할 때 이동하는 URL이 부모 URL과 상이하여 하기와 같은 오류 팝업 메시지를 보게 된다.
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException |
이 오류 메시지의 원인은 SSL 인증서 적용이 안되었거나, 코딩에 SSL 송수신 루틴을 추가해주지 않아서 그런다.
추가 방법은 앞서 썼던 글을 가면 자세히 볼 수 있다.
이동하기 ☞https://baekyle.tistory.com/5
[스프링] SSL API 통신 시 SSLHandshakeException & CrossDomain ERROR 오류에 대한 대응을 위한 코딩방법
크롬 브라우저에서 보안 강화 정책으로 이제 다른 도메인과 통신을 지행할 때, SSL 검증을 진행하여 동일한 도메인이 아닌 경우 통신오류를 발생시킨다. 즉, 이전과 다르게 SSL 통신 루틴을
baekyle.com
해당 오류는 즉 구글 리캡챠(reCAPTCHA), API 데이터 송수신 관련 오류로 인증서 오류이다.
RestTemplate 클래스의 postForObject 메소드를 단순히 사용하는 방식으로는 인증할 수 없다.
이를 처리하기 위해 하기의 루틴을 추가해줘야 한다.
1. 요약
1.1 라이브러리 추가
1.2 인증서 추가
1.3 코드 추가
2. 라이브러리 추가
- 하기의 라이브러리를 추가해준다.
httpclient-x.x.x.jar |
httpcore-x.x.x.jar |
3. jks 확장자 인증서 발급받고 라이브러리처럼 솔루션에 이식
- 돈을 받고 사던지 무료로 받던지 해서 jks 인증서를 발급받는다.
4. 하기 코딩 추가
ClassPathResource resource = new ClassPathResource("jks확장자 파일명");
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
String keyStorePassword = "jks 확장자 암호";
keyStore.load(new FileInputStream(resource.getFile()), keyStorePassword.toCharArray());
SSLContext sslcontext = SSLContexts.custom()
.useProtocol("SSL")
.loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) {
return true;
}
}).loadKeyMaterial(keyStore, keyStorePassword.toCharArray())
.build();
SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslcontext, NoopHostnameVerifier.INSTANCE);
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(csf)
.build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
상기 코드를 추가하고, 마지막으로 RestTemplate 클래스를 선전해줘서 rest 통신을 진행하면 정상적으로 될 것이다.
잘 이해가 안된다면 맨 위에 있는 링크로 이동해서 더 자세히 보면 된다.
'Stack Overflow > 스프링' 카테고리의 다른 글
[스프링] 체크박스 한번에 모든 것을 disabled 구분하면서 선택, 해제하기 (4) | 2022.01.29 |
---|---|
[스프링] JSTL에서 날짜 Date 추출 및 일자 연산 코드 (4) | 2022.01.15 |
[스프링] POST로 팝업 윈도우 창 데이터 값 전달하면서 새로 생성하기 (257) | 2022.01.09 |
[이클립스] error occured processing xml content is not allowed in prolog 관련 에러 (1056) | 2022.01.08 |
[이클립스] no setter found for property [BLABLA] in class 관련 대응 (129) | 2022.01.07 |
댓글