인터넷이 가능한 환경임에도 불구하고 PKIX path building failed 오류가 발생하는 이유는, 네트워크 보안 장비(방화벽, Proxy, 보안 솔루션)가 SSL 트래픽을 복호화하여 검사하는 과정에서 자체 생성한 인증서를 사용하기 때문입니다. Java(JRE/JDK)가 이 보안 장비의 인증서를 신뢰할 수 있는 기관(CA)으로 인식하지 못해 연결을 차단하는 것입니다.
이 문제를 해결하기 위한 **근본적인 해결책(인증서 등록)**과 **구조적 해결책(Nexus 구축)**을 정리해 드립니다.
1. 근본적인 해결책: Java Truststore에 인증서 등록
Nexus를 구축하기 전에도, Java가 외부 망에 접속할 수 있게 하려면 이 작업이 필요할 수 있습니다.
-
인증서 추출: 브라우저(Chrome 등)에서 https://repo.maven.apache.org에 접속한 후, 주소창의 자물쇠 아이콘을 클릭하여 인증서(파일 형식 .cer)를 내보내기 합니다. (보통 회사망이라면 회사 보안 인증서를 추출해야 합니다.)
-
Java에 등록: 관리자 권한으로 터미널을 열고 다음 명령어를 실행합니다.
Bashkeytool -import -alias maven_repo -keystore "C:\Program Files\Java\jdk-xx\lib\security\cacerts" -file "내보낸인증서경로.cer" # 기본 비밀번호: changeit -
Maven 재실행: mvn package를 다시 시도합니다.
2. 로컬/사내 Nexus 서버 구축 (권장 방안)
인터넷망이더라도 Nexus를 구축하면 빌드 속도 향상, 라이브러리 관리 중앙화, SSL 문제 일괄 해결 등의 장점이 있습니다.
① Nexus 설치 (Docker 사용 시 가장 간편)
Docker가 설치되어 있다면 한 줄로 실행 가능합니다.
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
(설치형은 Sonatype 홈페이지에서 다운로드 후 bin/nexus.exe run 실행)
② Nexus 설정 (Proxy Repository)
-
http://localhost:8081 접속 (초기 비번은 서버 내 admin.password 파일 확인)
-
Repository 설정: 기본적으로 생성되어 있는 maven-central (Proxy type) 확인.
-
Remote Storage가 https://repo1.maven.org/maven2/로 되어 있는지 확인.
-
-
SSL 설정 (Nexus 단에서): 만약 Nexus 서버 자체도 인터넷망의 보안 장비 때문에 에러가 난다면, Nexus 관리자 메뉴의 SSL Certificates 메뉴에서 Fetch from URL 기능을 통해 Maven Central의 인증서를 직접 추가할 수 있습니다.
③ Maven settings.xml 수정
개발자 PC의 Maven이 직접 인터넷으로 가지 않고, 로컬 Nexus를 거치도록 설정합니다.
<settings>
<mirrors>
<mirror>
<id>nexus-local</id>
<mirrorOf>*</mirrorOf> <!-- 모든 요청을 Nexus로 통합 -->
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
</settings>
3. Proxy 설정이 필요한 경우 (회사 망)

인터넷망이지만 Proxy 서버를 거쳐야만 외부로 나갈 수 있는 환경이라면 settings.xml에 프록시 정보를 넣어야 합니다.
<proxies>
<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>프록시서버주소</host>
<port>8080</port>
<!-- 인증이 필요한 경우 -->
<username>아이디</username>
<password>비밀번호</password>
<nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
</proxy>
</proxies>
4. 임시 방편 (보안상 비권장)
인증서 체크를 강제로 무시하고 빌드하는 방법입니다. (임시 확인용으로만 사용하세요.)
mvn package -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true
요약 및 제언
-
단순 해결: 1번 방법(인증서 등록)으로 Java가 보안 장비의 인증서를 인식하게 만드세요.
-
구조적 해결: 2번 방법(Nexus 구축)을 통해 팀 전체의 라이브러리 관리를 중앙화하세요. Nexus 서버 한 곳에만 인증서 설정을 해두면 모든 개발자가 개별 설정 없이 편리하게 빌드할 수 있습니다.
-
원인 파악: 현재 발생한 PKIX 에러는 인터넷 유무의 문제라기보다, **”중간에 가로채는 보안 인증서를 Java가 믿지 못하는 문제”**임을 이해하는 것이 중요합니다.