API 인터페이스 소켓 SSL 핸드쉐이크 에러
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.security.ssl.InputRecord.readFully(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
시스템에서 외부 API 와 통신을 하려는데 통신이되지 않고 Socket 에러를 나타냈다.
확인해보니 통신중 서버와 클라이언트간 SSL/TLS 3Way Handshake을 하면서 오류인 것을 확인했다.
확인 절차.먼저, PING 테스트 먼저 진행했다.
정상적으로 통신이 되는 것으로 확인했다.
두번쨰로, openssl 테스트를 진행했다.
SSL 443포트로 정상적으로 통신이 되는 것을 확인했다.
마지막으로 POSTMAN 으로 통신이 되는 지 확인했다.
정상적으로 통신이 되었다.
Curl Test까지 정상적으로 통신되었다.
서버에서 정상적으로 통신이 되는데 시스템에서만 통신이 되지 않는 것이 매우 의아했다.
at sun.security.ssl.InputRecord.readFully(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
디버그 에서 ssL 통신이 되지 않는 것이 문제 인것 같아 ssl세팅이 잘못된 것인지 확인했다.처음에는 시스템 웹 ssl 인증서를 발급받지않아서 통신이 되지 않는 다고 생각했는데, 집에서는 그런 설정을 하지 않아도 통신이 되어서 이것도 아닌것 같았다.
그래서 통신하면서 추가적으로 SSl 세팅을 해두었다.
처음엔 TSL 버전 없이 진행을 했었는데 같은 에러가 계속 나타나길래 TLSv1.2로 진행하였다.
TLs 버전 1.2으로 진해아였어 결국 응답코드 200코드 나타내었고 response를 받았다.
프론트에서도 정상적으로 응답 메시지가 나타난 것을 확인할 수 있다.