본문 바로가기
ERROR FIX

Exception: Received fatal alert: protocol_version 에러

by ppirae 2024. 6. 29.

 

해당 에러가 발생했다

 

1. 원인 : 서버와 자바 클라이언트 간의 tls 버전이 맞지않음

 

2. 환경 : 서버 - TLSv1.0, TLSv1.1, TLSv1.2 지원
              자바7 - TLSv1.0, TLSv1.1

서버는 v1.2를 지원하는데 자바7은 v1.2를 지원하지 않기 때문에 해당 에러가 발생하였다.

 

3. 해결방법: (1) 자바 8로 업그레이드 한다.

                     (2) 자바에  system properties 에 v1.2를 사용하도록 명시해준다.

                          java -Dhttps.protocols=TLSv1.2 -jar your-application.jar

                     (3) 코드에서 명시적으로 SSLContext 및 SSLSocketFactory를 설정한다.

나는 (3)번 방법을 선택하였다.

 

 

4. 추가 코드:

 // SSL 설정
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public void checkClientTrusted(X509Certificate[] certs, String authType) {
        }
        public void checkServerTrusted(X509Certificate[] certs, String authType) {
        }
    } };

    SSLContext sc = SSLContext.getInstance("TLSv1.2"); // TLSv1.2로 변경
    sc.init(null, trustAllCerts, new java.security.SecureRandom());

    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    });

 

해당 메서드에 위 SSL,TLS 설정을 추가하였더니 해결되었다.

댓글