Java uygulaması HTTPS adresine bağlanırken sun.security.provider.certpath.SunCertPathBuilderException ile birlikte "PKIX path building failed" görüyorsa, JVM sunucu sertifikasından güvendiği bir kök CA'ya uzanan zinciri kuramamıştır. Burada önemli olan hatayı susturmak değil, zincirin neresinde koptuğunu bulmaktır.
Zincir neden kurulamaz?
- Eksik ara sertifika: Sunucu yalnızca yaprak sertifikayı gönderiyor. Tarayıcılar eksik ara sertifikayı AIA alanından indirebilir, Java genellikle indirmez.
- Özel veya kurumsal CA: Sertifika, JVM'in tanımadığı dahili bir CA tarafından imzalanmış.
- Eski JDK: Yeni kök CA'lar eski sürümlerin
cacertsdosyasında yok. - SSL inceleyen proxy: Trafik yeniden imzalanıyor ve proxy kökü JVM'de tanımlı değil.
- Süresi dolmuş sertifika: Zincirdeki herhangi bir halka geçersiz.
Teşhis adımları
- Sunucunun gönderdiği zinciri görün:
"Verify return code" ve zincir derinliğine bakın (openssl s_client -connect ornek.com:443 -servername ornek.com -showcertsdepth=0, 1, 2). - Tek sertifika geliyorsa ara sertifika eksiktir; CA'nın verdiği "CA bundle" dosyasını sunucuya ekleyin.
- JVM hangi güven deposunu kullanıyor, doğrulayın:
java -Djavax.net.debug=ssl,trustmanager -jar uygulama.jar - Günlükte "trustStore is:" satırına bakarak doğru dosyanın okunduğunu teyit edin.
Önleme
En sağlıklı çözüm sunucu tarafını düzeltmektir: yaprak sertifika ile ara sertifikaları birlikte sunun. İstemci tarafında güven deposunu sertifikayı körü körüne içe aktararak şişirmek yerine yalnızca gerçekten gereken kök CA'yı ekleyin. Zinciri ziyaretçi gözüyle görmek için SSL denetleme aracını, yapılandırma yardımı için SSL sorun giderici sayfasını kullanabilirsiniz.
Sık yapılan hatalar
- Sertifikayı tarayıcıdan dışa aktarıp yalnızca yaprak sertifikayı truststore'a eklemek; bu, sertifika yenilendiğinde yeniden soruna yol açar. Kök veya ara CA'yı eklemek daha kalıcıdır.
- Uygulama sunucusunun kendi truststore ayarını unutup sistem cacerts'i değiştirmek.
- Zincirdeki süresi dolmuş bir ara sertifikayı fark etmemek. Her halkanın geçerlilik tarihini ayrı ayrı kontrol edin.
Bu adımlarla hata çoğunlukla sunucu yapılandırmasının tek bir satırına indirgenir. Zincir düzeldikten sonra istemci tarafında hiçbir değişiklik gerekmez.
Kısacası PKIX hatası bir güven zinciri sorunudur; zincirin eksik halkasını bulmak, truststore'a rastgele sertifika eklemekten daha kalıcı bir çözümdür.