Post

PKIX 인증서 등록

PKIX 인증서 등록

문제 : Exception in thread “main” javax.net.ssl.SSLHandshakeException: PKIX path building failed

회사에서 emulator로 Flutter 프로젝트를 실행하려고 했는데 발생했다.

  • Flutter 프로젝트를 실행할 때 Gradle이 소스를 다운받으려 하는데 SSL 인증서 오류가 발생한다
  • 프록시 환경이나 방화벽, 사내망 등 네트워크 환경에 따라 발생할 수 있다
  • 이 오류는 Gradle이 HTTPS를 통해 소스를 다운로드하려고 할 때, JDK가 해당 사이트의 SSL 인증서를 신뢰하지 않아서 발생한다

해결

1. SSL 인증서 추가

image.png

  • gradle이 소스를 다운받는 services.gradle.org 접속
  • 네트워크 주소 좌측 자물쇠 클릭

image.png

  • 루트 인증서 선택 → 내보내기

image.png

  • 인증서 등록

    1
    
      keytool -trustcacerts -keystore {jdk 경로\lib\security\cacerts} -importcert -alias gradle.org-1 -file {다운받은 인증서 경로}
    
  • 예시

    1
    
      keytool -trustcacerts -keystore "%JAVA_HOME%\lib\security\cacerts" -importcert -alias gradle.org-1 -file "C:\Users\sms1875\Downloads\{인증서 이름}.crt"
    
  • y 입력 → 인증서 등록

image.png

하지만, {jdk 경로}\lib\security\cacerts 에 인증서를 추가해도 PKIX 오류가 계속 발생하였다

2. Android Studio JDK 인증서 추가

local에 설치된 jdk와 별개로, android studio에서는 jdk를 번들로 제공한다. 이 jdk에 인증서를 추가해야 한다.

  • flutter doctor -v → android studio에서 사용하는 경로를 찾아서 인증서를 추가

스크린샷 2025-06-25 084558.png

  • C:\Program Files\Android\Android Studio\jbr\bin\java 경로로 1번을 수행

image.png

3. JDK 변경

다른 방법으로는 Flutter에 환경 변수를 설정하여 JDK를 변경하는 방법이 있다.

  • gradle에 맞는 jdk 설치
  • flutter config --jdk-dir={jdk 설치 경로}
    • 예시 : flutter config --jdk-dir="C:\Program Files\Java\jdk-18.0.2.1"
  • flutter doctor -v → 경로 변경이 적용되었는지 확인

    image.png

참고 : Flutter의 jdk 선택 우선순위

  1. flutter config --jdk-dir 로 명시적으로 설정된 jdk
  2. Android Studio가 번들로 제공하는 jdk
  3. JAVA_HOME 환경변수가 가리키는 jdk
  4. 시스템 PATH에서 찾을 수 있는 Java 바이너리
    • flutter config
      1
      2
      3
      4
      
       The Java Development Kit (JDK) installation directory. If unset, flutter will search for one in the following order:
       1) the JDK bundled with the latest installation of Android Studio,
       2) the JDK found at the directory found in the JAVA_HOME environment variable, and
       3) the directory containing the java binary found in the user's path.
      
This post is licensed under CC BY 4.0 by the author.