JAVA 프록시 환경에서 https로 요청했을 때 문제 발생 시 해결 법

2022. 7. 28. 15:20· Error
목차
  1. 1. 내 컴퓨터 인증서를 까는 방법
  2. 2. ssl인증을 무시하는 방법

프록시 환경에서 https 로 된 주소의 api를 요청할 때 다음과 같은 에러를 볼 수 있다.

  • PKIX path building failed
  • unable to find valid certification path to requested target
  • java.security.cert.CertificateException: No subject alternative names matching IP address found

http를 요청할 땐 그냥 되던 것이 https로 요청을 하니 뭔가 인증을 해줘야한댄다… 아무튼 뭔가 까다로워졌다.

역시 보안과 네트워크 공부도 해야한다.. 공부는 끝이 없다…

찾아낸 해결방법은 두 가지가 있다.

첫번째로 내 컴퓨터에 인증서를 깔거나 두번째로 ssl인증을 무시하는 방법

 

 

 

 

1. 내 컴퓨터 인증서를 까는 방법

  • 내 컴퓨터에서만 인증을 받는 것이다 보니 해당 프록시를 쓰는 프로젝트를 빌드해서 다른 컴퓨터에서 사용할 때는 또 요청이 안되는 문제가 발생할 수 있겠다.
  • 참고1, 참고2

나의 경우 ${JAVA_HOME} 의 경로가 제대로 안잡히는건지 설치가 제대로 되지 않아 다음과 같이 진행했다.

먼저 환경변수 설정에서 JAVA_HOME의 경로를 찾아 해당 위치를 파일 탐색기에서 열어준다.

 

 

 

그 다음 lib/security 폴더로 이동한다.

 

해당 폴더에서 주소창에 cmd 를 쳐서 cmd창을 연다.

여기에서 다음을 입력한다.

# 인증서 받기

curl -o root.cer https://letsencrypt.org/certs/isrgrootx1.pem

curl -o ca.cer https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem

굳이 JAVA_HOME의 경로까지 와서 한건...파일탐색기에서 root.cer나 ca.cer가 잘 설치됐나 확인해보시라구?

이것저것 테스트하면서 다른 파일들도 생겼다. 7-28에 생긴 파일들이 테스트하면서 생긴 파일들인데... 아무튼

이것저것 설치를 하고서 해당 위치에 잘 있나 확인한 후에

 

 

# keystore에 위에서 받은 인증서를 import 한다

sudo keytool -import -trustcacerts -keystore ./cacerts -alias letsroot -file root.cer -storepass changeit -noprompt
sudo keytool -import -trustcacerts -keystore ./cacerts -alias letsca -file ca.cer -storepass changeit -noprompt

 

curl -O https://gist.githubusercontent.com/lesstif/cd26f57b7cfd2cd55241b20e05b5cd93/raw/InstallCert.java

java -cp ./ InstallCert SSL {인증서를 받아올 호스트주소 입력} 

서버에서 보내오는 인증서가 두개라면 2를 입력해 enter하고 하나라면 1을 눌러 enter

그러면

Added certificate to keystore ??? using alias 어떤호스트주소

가 나올 것이다.

사실 정확히 어떤 원리인진 모르겠다. 그냥 이렇게 하다보니 됐다..(멋쓱..)

이부분은 나중에 따로 시간이 있을 때 정확하게 공부해야할 것 같다. 

 

 

 

2. ssl인증을 무시하는 방법

  • 말그대로 인증을 무시하다보니 보안이 취약할 수 있다는 단점이 있겠다.
  • 참고
// ssl security Exception 방지
    public void disableSslVerification(){
        // TODO Auto-generated method stub
        try
        {
            // Create a trust manager that does not validate certificate chains
            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){
                }
            }
            };

            // Install the all-trusting trust manager
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

            // Create all-trusting host name verifier
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session){
                    return true;
                }
            };

            // Install the all-trusting host verifier
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
    }

해당 메소드를 만든 후에

HttpURLConnection이나 RestTemplate 실행 전에 해당 메소드를 실행시키면 된다.

 

 

 

반응형
저작자표시 (새창열림)

'Error' 카테고리의 다른 글

vue2 를 Docker 컨테이너에서 개발하기  (0) 2024.03.28
glTF-Transform 모듈의 ktx2 압축을 위한 사용 시 에러  (0) 2022.06.16
bpy 모듈 설치하기  (0) 2022.06.03
  1. 1. 내 컴퓨터 인증서를 까는 방법
  2. 2. ssl인증을 무시하는 방법
'Error' 카테고리의 다른 글
  • vue2 를 Docker 컨테이너에서 개발하기
  • glTF-Transform 모듈의 ktx2 압축을 위한 사용 시 에러
  • bpy 모듈 설치하기
sovelop
sovelop
무슨 생각을 해.. 그냥 하는거지
sovelop
so's devlog
sovelop
전체
오늘
어제
  • 분류 전체보기 (141)
    • 🔥TIL (15)
    • 생각 (5)
      • Daily Routine (0)
    • WEB (2)
    • VueJS (1)
    • 파이썬 문법 (17)
      • Django (0)
    • 알고리즘 (23)
      • 백준 알고리즘 (13)
      • 프로그래머스 (0)
      • 기타 사이트 알고리즘 (6)
    • 컴퓨터공학입문 (13)
    • Data_Analysis (9)
    • Javascript (8)
      • 문법 (8)
      • node.js (0)
    • Java (9)
      • 문법 (3)
      • Android Studio (0)
      • Algorithm (2)
    • Server (6)
      • sql (2)
      • linux (2)
    • Back-up (22)
      • Git + Github (5)
      • English (0)
      • etc (17)
    • 테크 관련 세미나 (4)
    • English (0)
    • Error (4)
    • 코테후기 (0)

블로그 메뉴

  • About me

공지사항

인기 글

태그

  • 혼공단
  • va87m
  • # 백준 #파이썬 #python
  • 혼공자
  • 코딩좀알려주라
  • 무접점저소음
  • 한빛미디어
  • 코알라univ

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
sovelop
JAVA 프록시 환경에서 https로 요청했을 때 문제 발생 시 해결 법
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.