java에서 https 연결 SSL 인증 오류시 조치

dev-well-being·2023년 3월 8일
1
post-thumbnail

java에서 https로 시작하는 url을 호출시 아래와 같은 오류가 발생한다.

     sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

확인을 해보니 java에 해당 URL의 SSL 인증서를 설정해줘야 한다는 것이다.

그래서 위와 같이 java에서 SSL오류 발생시 조치방법에 대해서 기록해본다.

SSL 인증서 가져오기

java에서 ssl 에러가 나는 경우는 https 접근에 필요한 SSL이 등록되어 있지 않기 때문이다. 일단 접근해야 하는 URL에 OPEN SSL 인증서를 가져온다.

openssl s_client -connect google.com:443

그러면 아래처럼 인증서 관련 내용들이 출력되는데 BEGIN CERTIFICATE 부분부터 END CERTIFICATE까지가 인증서 부분이기 때문에 해당 부분만 복사해서 파일로 저장한다.

아래 명령어를 실행해서 제대로 추출되었는지 확인한다.

openssl x509 -inform PEM -text -in cert_file

아래 그림 처럼 나오면 정상이다.


Java에서 인증서 등록하기

위에서 추출한 인증서를 등록하기 위해서는 java가 설치된 경로 밑에 lib/security/cacerts 저장되고 여기로 인증서를 추가해줘야 한다.

본인은 윈도우 로컬 환경에서 인증서를 추가해줘야 했기 때문에 윈도우 기준으로 정리해보았다.

아래 명령어를 입력한다.

keytool -keystore C:\Users\xxxxxx\.jdks\temurin-17.0.6\lib\security\cacerts -importcert -alias google -file C:\cert\cert_file

그러면 아래처럼 명령어를 입력하라고 하는데 초기 명령어는 'changeit'이다.

경고: -cacerts 옵션을 사용하여 cacerts 키 저장소에 액세스하십시오.
키 저장소 비밀번호 입력:

비밀번호를 입력하면 아래와 같이 뜨고 yes(한글모드의 경우 '예')를 입력한다.

소유자: CN=*.google.com
발행자: CN=SSL_XXXXXXX, O=XXXXXXX, C=KR
일련 번호: 2d2d0dbce77c186b7a8616b8806d16a6
적합한 시작 날짜: Wed Feb 08 13:34:30 KST 2023 종료 날짜: Wed May 03 13:34:29 KST 2023
인증서 지문:
         SHA1: B9:1B:5E:0D:E4:55:6C:35:B3:5D:C7:46:1E:E1:F3:2C:90:64:76:AD
         SHA256: C1:45:B6:0A:D4:68:47:AC:E2:00:DA:7F:DD:D1:93:CB:90:7D:8E:5B:0A:D8:1D:B6:8A:6F:F1:D4:93:38:7C:81
서명 알고리즘 이름: SHA256withRSA
주체 공용 키 알고리즘: 2048비트 RSA 키
버전: 3

확장:

#1: ObjectId: 2.5.29.17 Criticality=false
SubjectAlternativeName [
  DNSName: *.google.com
  DNSName: *.appengine.google.com
  DNSName: *.bdn.dev
  DNSName: *.origin-test.bdn.dev
  DNSName: *.cloud.google.com
  DNSName: *.crowdsource.google.com
  DNSName: *.datacompute.google.com
  DNSName: *.google.ca
  DNSName: *.google.cl
  DNSName: *.google.co.in
  DNSName: *.google.co.jp
  DNSName: *.google.co.uk
  DNSName: *.google.com.ar
  DNSName: *.google.com.au
  DNSName: *.google.com.br
  DNSName: *.google.com.co
  DNSName: *.google.com.mx
  DNSName: *.google.com.tr
  DNSName: *.google.com.vn
  DNSName: *.google.de
  DNSName: *.google.es
  DNSName: *.google.fr
  DNSName: *.google.hu
  DNSName: *.google.it
  DNSName: *.google.nl
  DNSName: *.google.pl
  DNSName: *.google.pt
  DNSName: *.googleadapis.com
  DNSName: *.googleapis.cn
  DNSName: *.googlevideo.com
  DNSName: *.gstatic.cn
  DNSName: *.gstatic-cn.com
  DNSName: googlecnapps.cn
  DNSName: *.googlecnapps.cn
  DNSName: googleapps-cn.com
  DNSName: *.googleapps-cn.com
  DNSName: gkecnapps.cn
  DNSName: *.gkecnapps.cn
  DNSName: googledownloads.cn
  DNSName: *.googledownloads.cn
  DNSName: recaptcha.net.cn
  DNSName: *.recaptcha.net.cn
  DNSName: recaptcha-cn.net
  DNSName: *.recaptcha-cn.net
  DNSName: widevine.cn
  DNSName: *.widevine.cn
  DNSName: ampproject.org.cn
  DNSName: *.ampproject.org.cn
  DNSName: ampproject.net.cn
  DNSName: *.ampproject.net.cn
  DNSName: google-analytics-cn.com
  DNSName: *.google-analytics-cn.com
  DNSName: googleadservices-cn.com
  DNSName: *.googleadservices-cn.com
  DNSName: googlevads-cn.com
  DNSName: *.googlevads-cn.com
  DNSName: googleapis-cn.com
  DNSName: *.googleapis-cn.com
  DNSName: googleoptimize-cn.com
  DNSName: *.googleoptimize-cn.com
  DNSName: doubleclick-cn.net
  DNSName: *.doubleclick-cn.net
  DNSName: *.fls.doubleclick-cn.net
  DNSName: *.g.doubleclick-cn.net
  DNSName: doubleclick.cn
  DNSName: *.doubleclick.cn
  DNSName: *.fls.doubleclick.cn
  DNSName: *.g.doubleclick.cn
  DNSName: dartsearch-cn.net
  DNSName: *.dartsearch-cn.net
  DNSName: googletraveladservices-cn.com
  DNSName: *.googletraveladservices-cn.com
  DNSName: googletagservices-cn.com
  DNSName: *.googletagservices-cn.com
  DNSName: googletagmanager-cn.com
  DNSName: *.googletagmanager-cn.com
  DNSName: googlesyndication-cn.com
  DNSName: *.googlesyndication-cn.com
  DNSName: *.safeframe.googlesyndication-cn.com
  DNSName: app-measurement-cn.com
  DNSName: *.app-measurement-cn.com
  DNSName: gvt1-cn.com
  DNSName: *.gvt1-cn.com
  DNSName: gvt2-cn.com
  DNSName: *.gvt2-cn.com
  DNSName: 2mdn-cn.net
  DNSName: *.2mdn-cn.net
  DNSName: googleflights-cn.net
  DNSName: *.googleflights-cn.net
  DNSName: admob-cn.com
  DNSName: *.admob-cn.com
  DNSName: googlesandbox-cn.com
  DNSName: *.googlesandbox-cn.com
  DNSName: *.safenup.googlesandbox-cn.com
  DNSName: *.gstatic.com
  DNSName: *.metric.gstatic.com
  DNSName: *.gvt1.com
  DNSName: *.gcpcdn.gvt1.com
  DNSName: *.gvt2.com
  DNSName: *.gcp.gvt2.com
  DNSName: *.url.google.com
  DNSName: *.youtube-nocookie.com
  DNSName: *.ytimg.com
  DNSName: android.com
  DNSName: *.android.com
  DNSName: *.flash.android.com
  DNSName: g.cn
  DNSName: *.g.cn
  DNSName: g.co
  DNSName: *.g.co
  DNSName: goo.gl
  DNSName: www.goo.gl
  DNSName: google-analytics.com
  DNSName: *.google-analytics.com
  DNSName: google.com
  DNSName: googlecommerce.com
  DNSName: *.googlecommerce.com
  DNSName: ggpht.cn
  DNSName: *.ggpht.cn
  DNSName: urchin.com
  DNSName: *.urchin.com
  DNSName: youtu.be
  DNSName: youtube.com
  DNSName: *.youtube.com
  DNSName: youtubeeducation.com
  DNSName: *.youtubeeducation.com
  DNSName: youtubekids.com
  DNSName: *.youtubekids.com
  DNSName: yt.be
  DNSName: *.yt.be
  DNSName: android.clients.google.com
  DNSName: developer.android.google.cn
  DNSName: developers.android.google.cn
  DNSName: source.android.google.cn
]

이 인증서를 신뢰합니까? [아니오]:

그러면 정상적으로 등록되고 java에서 정상적으로 SSL 인증을 받게 된다.

profile
안녕하세요!! 좋은 개발 문화를 위해 노력하는 dev-well-being 입니다.

0개의 댓글