İstemci, sunucunun gönderdiği zinciri güvendiği bir kök sertifikaya (Root CA) bağlayamadığında "root sertifika bulunamadı" türü bir hata verir. OpenSSL tarafında bu çoğunlukla unable to get local issuer certificate (hata 20) veya self signed certificate in certificate chain (hata 19) olarak görünür.
Belirtiler ve olası nedenler
- Tarayıcıda sorun yok ama curl, Java, Python veya bir mobil uygulama hata veriyor.
- Sunucu yalnızca kendi sertifikasını sunuyor, ara sertifika (intermediate) eksik.
- İstemcinin güven deposu eski; ilgili kök CA hiç tanımlı değil.
- Kurumsal proxy veya güvenlik cihazı trafiği kendi kök sertifikasıyla yeniden imzalıyor.
- Sertifika gerçekten özel (kurum içi) bir CA'dan geliyor ve kökü dağıtılmamış.
Adım adım teşhis
Önce sunucunun hangi zinciri gönderdiğine bakın:
openssl s_client -connect alanadi.com:443 -servername alanadi.com -showcerts
Çıktıda Verify return code satırı hatayı gösterir. Kaç sertifika geldiğini ve her birinin s: (subject) ile i: (issuer) alanlarını kontrol edin; zincirin sonunda kök CA'ya işaret eden bir issuer olmalıdır. Sertifika dosyalarını elinizdeki paketle doğrulamak için:
openssl verify -CAfile ca-bundle.crt -untrusted ara.crt alanadi.crt
Çözüm
- Ara sertifikaları sunucu yapılandırmasına ekleyin (nginx'te sertifika ve ara sertifikayı tek dosyada birleştirin, Apache'de zincir dosyasını tanımlayın).
- Yalnızca istemci tarafında sorun varsa işletim sistemi veya uygulama güven deposunu güncelleyin.
- Kurum içi CA kullanıyorsanız kök sertifikayı ilgili istemcilerin güven deposuna ekleyin.
- Sunucuya kök sertifikayı göndermek genellikle gerekmez; asıl eksik olan çoğunlukla ara sertifikadır.
Önleme
Kurulumdan sonra SSL kontrol aracıyla zincirin tam olduğunu doğrulayın ve yalnızca tarayıcıda denemekle yetinmeyin; tarayıcılar eksik ara sertifikayı bazen kendileri indirir. Hata sürerse SSL sorun giderici sayfasındaki adımlara göz atabilirsiniz.