반응형
javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
두 개의 REST API를 가지고 서로 요청을 주고받기 위해 RestTemplate을 사용하던 중 발생한 에러입니다.
초기 개발단계에서 하나의 REST API는 http:localhost:8081 으로 가동하였고, 다른 하나의 API는 http:localhost:8083으로 가동하여 restTemplate을 통해 요청을 보냈습니다.
public ResponseEntity<?> qrScan(QrScan qrScan) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<QrScan> qrScanRequest = new HttpEntity<>(qrScan, headers);
String url = "https://localhost:8081/v1/payment/qr";
PaymentResult result = restTemplate.postForObject(url, qrScanRequest, PaymentResult.class);
// 뒷 로직 생략
return response.success();
}
로컬 환경에서 8081 포트로 작동시킨 프로젝트입니다. 해당 로직을 통해 아래 포트 8083으로 동작하는 api에 post요청을 보냈습니다.
@PostMapping("/qr")
public ResponseEntity<?> paymentQr(PaymentQr paymentQr, Errors errors) {
// 로직 생략
return response.success();
}
8083 포트로 작동시킨 api입니다. 위에서 보낸 요청을 해당 컨트롤러에서 받아서 처리하는 부분입니다.
이렇게 위 코드(프로젝트)에서 아래 코드(다른 프로젝트)로 요청을 보내며 해당 에러가 발생했고, 에러의 원인은 HTTPS를 통해 HTTP 포트에 액세스했기 때문이었습니다.
8081로 가동한 프로젝트 코드의 url 를 보면 "https://localhost:8081~" 으로 되어있습니다.
하지만 실제로 해당 요청을 받는 localhost:8081은 https가 아닌 http로 되어있습니다.
그래서 해결방안은 당연하게도 해당 부분을 http로 수정하여 요청을 보내니 에러가 발생하지 않았습니다.
반응형