Maven bağımlılık indirirken PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target görüyorsanız Maven'ın çalıştığı Java, depo sunucusunun sertifika zincirine güvenmiyor demektir. Benzer şekilde Received fatal alert: handshake_failure hatası protokol uyumsuzluğuna işaret eder.
Belirtiler ve nedenler
- Java'nın
cacertsgüven deposunda ilgili kök veya ara CA yok (kurumsal Nexus/Artifactory, TLS denetimi yapan proxy). - Depo sunucusu ara sertifikayı göndermiyor.
- Eski Java sürümü TLS 1.2'yi varsayılan kullanmıyor; sunucu ise yalnızca TLS 1.2+ kabul ediyor.
- Maven, beklediğinizden farklı bir JDK ile çalışıyor.
Teşhis
mvn -version
openssl s_client -connect nexus.ornek.com:443 -servername nexus.ornek.com -showcerts
mvn -X dependency:resolve -Djavax.net.debug=ssl:handshake
mvn -version çıktısındaki Java home dizinini not alın; düzeltme o JDK'nın güven deposuna yapılmalıdır.
Çözüm: CA'yı Java güven deposuna eklemek
keytool -importcert -trustcacerts -alias kurum-ca -file kurum-ca.crt \
-keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit
Varsayılan şifre genellikle changeit'tir; kurumunuz değiştirmiş olabilir. Sistem deposunu değiştirmek istemezseniz ayrı bir truststore oluşturup yalnızca Maven'a gösterin:
export MAVEN_OPTS="-Djavax.net.ssl.trustStore=/etc/ssl/maven-truststore.jks -Djavax.net.ssl.trustStorePassword=sifreniz"
Handshake hatasında ise güncel bir JDK kullanın ya da eski sürümde -Dhttps.protocols=TLSv1.2 deneyin.
Önleme
- Depo sunucusunda tam zinciri (yaprak + ara) yayınlayın.
- CI imajlarında kurumsal CA'yı imaj oluşturma aşamasında ekleyin.
- Doğrulamayı kapatan bayrakları kalıcı yapmayın.
Kendi depo sunucunuz için SSL sertifikaları, zincir kontrolü için SSL Checker kullanabilirsiniz.