SSL Sertifikası

Java SSL: unable to find valid certification path

'unable to find valid certification path' hatasını keytool ile çözün: sertifikayı Java cacerts veya özel truststore'a ekleme adımları.

Java'da "unable to find valid certification path to requested target" hatası, sunucu sertifikasının zinciri JVM güven deposunda bulunan bir köke bağlanamadığında çıkar. Zincirin sunucu tarafında eksik olmadığını doğruladıysanız, çözüm doğru kök veya ara sertifikayı güven deposuna eklemektir.

Ön koşullar

  • Uygulamanızın hangi JDK/JRE ile çalıştığını bilin (java -XshowSettings:properties -version çıktısında java.home değerine bakın).
  • Eklenecek sertifikayı güvenilir bir kaynaktan alın (CA'nın yayınladığı kök/ara sertifika).
  • Değişiklik için yazma yetkiniz ve yedeğiniz olsun.

Sertifikayı keytool ile içe aktarma

  1. Mevcut deposunu yedekleyin ve sertifikanın zaten ekli olup olmadığına bakın.
  2. Sertifikayı ekleyin (varsayılan cacerts parolası genellikle changeit değeridir, kurumunuzda değiştirilmiş olabilir):
    keytool -importcert -alias ornek-ca -file ornek-ca.crt \
      -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit
  3. Sistem deposunu değiştirmek istemiyorsanız ayrı bir truststore oluşturun ve uygulamaya tanıtın:
    keytool -importcert -alias ornek-ca -file ornek-ca.crt \
      -keystore ozel-truststore.jks -storepass parola123
    java -Djavax.net.ssl.trustStore=ozel-truststore.jks \
      -Djavax.net.ssl.trustStorePassword=parola123 -jar uygulama.jar
  4. Uygulamayı yeniden başlatın; JVM güven deposunu yalnızca açılışta yükler.

Doğrulama ve sık hatalar

İçe aktarmayı keytool -list -keystore ... -alias ornek-ca ile doğrulayın. Sık yapılan hatalar: yanlış JDK'nın deposunu değiştirmek (sistemde birden fazla Java olabilir), Docker imajında değişikliği imaj yeniden oluşturulurken kaybetmek ve yaprak sertifika yerine yanlış halkayı eklemek. Tomcat veya Spring Boot kullanıyorsanız truststore yolunu ilgili yapılandırma dosyasında da belirtmeniz gerekebilir.

Ek notlar

  • Java 9 ve sonrasında cacerts dosyası $JAVA_HOME/lib/security/cacerts konumundadır; Java 8'de $JAVA_HOME/jre/lib/security/cacerts olabilir.
  • Alias adları benzersiz olmalıdır; aynı adla ikinci içe aktarma hata verir.
  • Çok sayıda uygulamanın paylaştığı bir JDK'da sistem deposunu değiştirmek diğer uygulamaları da etkiler; bu durumda ayrı truststore daha güvenlidir.

Kalıcılık için içe aktarma komutunu dağıtım betiğinize veya Dockerfile'a ekleyin. JDK güncellemesi cacerts dosyasını yenileyebileceğinden, eklediğiniz sertifikaların güncelleme sonrası yerinde durduğunu da kontrol edin.

Herkese açık bir siteye bağlanırken bu hatayı alıyorsanız önce sunucunun ara sertifikayı gönderip göndermediğini SSL denetleme aracıyla kontrol edin; sertifika temini için SSL sertifikaları sayfasına göz atabilirsiniz.

Bu makale faydalı oldu mu?

Makale Ara

Sunucu SSL Hataları

Yardıma mı İhtiyacınız Var?

Aradığınızı bulamadıysanız destek ekibimiz size yardımcı olabilir.

Destek Talebi Aç