서버간의 https 통신 시에 종종 발생하는 에러다
브라우저를 통해 해당 서버에 요청을 보냈을 때는 나지 않는데
서버에서 서버로 요청을 보낼 때 이 에러가 발생해서 의아해 하곤 했다.
이 문제를 이해하기 위해서는 https 통신에 대해 대략적으로 알아야 한다.
https 프로토콜에서는 클라이언트가 서버로 요청을 보낼 때의 과정을 정말 간략하게 요약하면
1. 서버를 신뢰할 수 있는지 인증
2. 서버와의 통신에서 사용할 대칭키 교환
이 두가지 과정이 필요하다.
위의 두 과정이 과정이 ssl handshake의 일부분이다.
이때 server에서는 공인 인증 기관인 CA에서 자신의 서버에 대한 정보를 제공하여 ssl 인증서를 발급 받은 뒤
클라이언트와의 handshake 과정에서 이를 보내 인증한다.
그럼 이제 이 ssl 인증서를 활용하여 클라이언트가 서버를 신뢰할 수 있다고 여기게 되면 위의 오류가 발생하지 않게 된다.
브라우저에서는 os의 신뢰할 수 있는 인증서 목록을 통해 해당 ssl 인증서의 유효성을 판단한다. (여기도 ca의 계층관계, ssl 인증서의 유효성 파악 방법 등 복잡한 내용이 있지만 생략한다. )
그러므로 별 문제없이 서버에 연결 할 수 있다.
그래서 java로된 서버에서도 마찬가지로 JVM에 신뢰할 수 있는 인증서를 추가해 주어야 한다.
그래서 브라우저를 통해 해당 서버의 url로 접속하면 아래와 같이 서버의 ssl 인증서를 확인할 수 있다.
여기서 서버가 보내고 있는 ssl 인증서를 다운받아서 java 에 적용해주면 문제가 발생하지 않게 된다.
여기서 주의해야 할 점은 프론트 주소에서 ssl 인증서를 받으면 안되고
통신해야 하는 해당 서버로 접속해서 ssl 인증서를 받아와야 한다 !