Ara Sertifika Eksik (Incomplete Chain) Hatası ve Çözümü
Masaüstü tarayıcıda her şey yolunda görünüyor, kilit simgesi yerinde. Ama mobil uygulamanız sunucuya bağlanamıyor, ödeme sağlayıcısının bildirimleri gelmiyor ya da bir müşteriniz "sitenize girerken güvenlik uyarısı alıyorum" diyor. Bu tablonun en yaygın sebebi eksik ara sertifikadır.
Sertifika zinciri nedir?
Sitenizin sertifikasını doğrudan bir kök sertifika makamı değil, onun yetkilendirdiği bir ara sertifika imzalar. Tarayıcı güveni şöyle kurar: site sertifikası → ara sertifika → cihazda yüklü kök sertifika. Kök sertifika cihazdadır; ama ara sertifikayı sunucunun göndermesi gerekir.
Sunucu yalnızca kendi sertifikasını gönderirse zincir kopar. Bazı masaüstü tarayıcılar eksik parçayı daha önce gördükleri ya da kendileri indirdikleri bir kopyayla tamamlar; bu yüzden sorun sizin bilgisayarınızda görünmeyebilir. Mobil uygulamalar, Java ve .NET istemcileri, curl, ödeme altyapıları ve çoğu API istemcisi ise tamamlamaz ve bağlantıyı reddeder.
Nasıl anlaşılır?
SSL kontrol aracımız zinciri sunucunun gönderdiği hâliyle sayar ve eksikse "Eksik — ara sertifika gönderilmiyor" der. Komut satırında:
openssl s_client -connect ornek.com:443 -servername ornek.com -showcerts </dev/null 2>/dev/null \
| grep -c "BEGIN CERTIFICATE"
Sonuç 1 ise sunucu yalnızca site sertifikasını gönderiyor demektir; sağlıklı bir yapılandırmada en az 2 çıkar.
Çözüm
Nginx
En sık hata, ssl_certificate satırında cert.pem kullanmaktır. Let's Encrypt ile fullchain.pem kullanın:
ssl_certificate /etc/letsencrypt/live/ornek.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ornek.com/privkey.pem;
Ücretli bir sertifikada sağlayıcının verdiği site sertifikası ile ara sertifika dosyasını bu sırayla tek dosyada birleştirin (önce site, sonra ara sertifika) ve o dosyayı gösterin. Ardından sudo nginx -t && sudo systemctl reload nginx.
Apache
Apache 2.4.8 ve sonrasında SSLCertificateFile zinciri içeren dosyayı gösterebilir:
SSLCertificateFile /etc/letsencrypt/live/ornek.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ornek.com/privkey.pem
Daha eski sürümlerde ara sertifika SSLCertificateChainFile ile ayrıca verilir.
cPanel / Plesk
Sertifikayı elle yüklediyseniz, sertifika ekranındaki CA Bundle (ara sertifika) alanını doldurun. Sağlayıcınız bu dosyayı genellikle ca-bundle veya intermediate adıyla verir.
Düzelttikten sonra
Değişikliği tarayıcıda değil, dışarıdan test edin: tarayıcınız eski bir ara sertifikayı önbellekte tutuyor olabilir ve sorun hiç yokmuş gibi görünebilir. Aracımızda "Tam ve güvenilir" ve zincirde 2 veya daha fazla sertifika görmelisiniz.