Genel Bakış
X.509 Açık Anahtar Altyapısı (PKI) modelinde güven, hiyerarşik bir zincir aracılığıyla kurulur: güvenilir bir kök Sertifika Otoritesi (CA), bir veya daha fazla ara CA'yı imzalar; bu ara CA'lar da son-varlık (sunucu) sertifikalarını imzalar. Tarayıcılar ve işletim sistemleri, güvenilir kök CA sertifikalarını içeren bir depoyla birlikte gelir ancak genellikle ara sertifikaları önceden önbelleğe almaz.
Eksik sertifika zinciri, bir TLS sunucusunun yalnızca kendi son-varlık sertifikasını — ya da zincirin eksik bir alt kümesini — gerekli ara CA sertifikaları olmadan göndermesi durumunda ortaya çıkar. Bu ara sertifikaları önbellekte bulundurmayan istemciler, sunucunun kimliğini bağımsız olarak doğrulayamaz; bu da TLS el sıkışması hatalarına veya tarayıcı güvenlik uyarılarına yol açar.
Nasıl çalışır?
TLS el sıkışması sırasında (RFC 5246 / RFC 8446'da tanımlanan), sunucunun kendi sertifikasını ve isteğe bağlı olarak güvenilir köke kadar uzanan (ancak genellikle kök dahil edilmeden) ek sertifikaları göndermesi gerekir. Ayrıntılı mekanizma şu şekildedir:
- Certificate mesajı: Sunucu, DER kodlu sertifikaların sıralı bir listesini içeren bir
Certificateel sıkışması mesajı gönderir. İlk girdi sunucunun kendi sertifikası olmalıdır; sonraki girdiler köke doğru sıralanmış ara CA sertifikaları olmalıdır. - İstemci yol oluşturma: İstemci, sunucu sertifikasından yerel güven deposundaki güvenilir bir köke kadar bir sertifikasyon yolu oluşturmaya çalışır. Bir ara CA sertifikası sunucunun mesajında yoksa ve yerel olarak önbellekte bulunmuyorsa yol oluşturma başarısız olur.
- AIA getirme (güvenilmez yedek): Bazı istemciler (özellikle Windows/IE), sunucu sertifikasındaki Yetkilendirme Bilgisi Erişimi (AIA) uzantısını takip ederek eksik ara sertifikaları HTTP üzerinden indirebilir. Ancak bu davranış evrensel değildir — birçok istemci (katı mobil uygulamalar, IoT cihazları, AIA desteği olmayan curl ve bazı tarayıcılar) AIA takibini gerçekleştirmez ve bu da kesin hatalara neden olur.
- Yanlış yapılandırma nedeni: Sorun en yaygın olarak, bir yöneticinin CA tarafından sağlanan ara CA sertifikasını paketlemeksizin yalnızca sunucu sertifikası dosyasını yüklemesi ya da web sunucusu yapılandırmasının (örn. Apache
SSLCertificateChainFile, Nginxssl_certificatepaketi) hatalı ayarlanması durumunda ortaya çıkar.
İş etkisi
Pratik sonuçlar, istemcinin toleransına ve önbellek durumuna bağlıdır:
- Bozuk kullanıcı deneyimi: Firefox gibi tarayıcılar (AIA takibini gerçekleştirmez) kesin bir güven hatası görüntüler ve kullanıcıların siteye erişmesini tamamen engeller. Bu durum dönüşüm oranlarını doğrudan düşürür ve kullanıcı güvenini zedeler.
- API ve otomasyon hataları: Sunucular arası entegrasyonlardaki HTTP istemcileri (ödeme ağ geçitleri, webhook'lar, CI/CD hatları, mobil SDK'lar) genellikle katı zincir doğrulaması uygular ve bağlantıyı reddeder; bu da kritik iş akışlarını aksatabilir.
- Uyumluluk riski: PCI DSS, HIPAA ile ilgili rehberler ve diğer çerçeveler doğru şekilde yapılandırılmış TLS gerektirir. Eksik bir zincir, denetimler sırasında işaretlenebilecek yanlış yapılandırma kanıtıdır.
- İtibar hasarı: Sertifika hatası görüntüleyen halka açık hizmetler, müşteri güvenini zayıflatır ve arama motorları veya güvenlik derecelendirme platformları tarafından işaretlenebilir.
- Aralıklı hatalar: Bazı istemciler ara sertifikaları önceki bağlantılardan önbelleğe aldığından, hatalar aralıklı görünebilir ve yeniden oluşturulması güç olabilir; bu da olay müdahalesini karmaşıklaştırır.
Nasıl düzeltilir?
- CA'nızdan tam sertifika paketini alın: CA'nız bir sertifika verdiğinde, ara CA sertifikası/sertifikaları da sağlar. Tam zincir dosyasını indirin (genellikle
ca-bundle.crt,chain.pemveya benzeri etiketle sunulur). - Web sunucunuzu tam zinciri sunacak şekilde yapılandırın:
- Nginx: Sunucu sertifikanızı ve tüm ara sertifikaları tek bir PEM dosyasında sırayla birleştirin (önce sunucu sertifikası, ardından ara sertifikalar).
ssl_certificate /path/to/fullchain.pem;ile referans verin. - Apache: Sunucu sertifikası için
SSLCertificateFiledirektifini kullanın veSSLCertificateChainFiledirektifini (Apache 2.4.7 ve öncesi) ya daSSLCertificateFiletarafından referans verilen aynı dosyaya ara sertifikaları ekleyin (Apache 2.4.8+). - IIS: Ara sertifikaları içeren tam PKCS#12 (.pfx) paketini içe aktarın ya da ara sertifikaları sunucunun Ara Sertifikasyon Yetkilileri deposuna manuel olarak yükleyin.
- HAProxy / Yük dengeleyiciler: Yapılandırılmış sertifika yolunda tam zinciri içeren bir PEM paketi sağlayın.
- Nginx: Sunucu sertifikanızı ve tüm ara sertifikaları tek bir PEM dosyasında sırayla birleştirin (önce sunucu sertifikası, ardından ara sertifikalar).
- Dağıtım sonrasında zinciri doğrulayın:
openssl s_client -connect example.com:443 -showcertsgibi bir araç kullanın ve tüm ara sertifikaların döndürüldüğünü doğrulayın. SSL Labs'ın SSL Server Test gibi çevrimiçi araçlar da zincir bütünlüğünü raporlar. - Sertifika yönetimini otomatikleştirin: ACME tabanlı otomasyon kullanın (örn. Certbot, Kubernetes için cert-manager); bu sistemler tam sertifika zincirini otomatik olarak temin eder ve yeniler, böylece insan hatasını azaltır.
- AIA takibine güvenmeyin: İstemcilerin eksik ara sertifikaları otomatik olarak getireceğini asla varsaymayın. Her zaman tam zinciri açıkça sunun.
- Sürekli izleyin: Sertifika yenilemeleri sonrasındaki gerilemeleri yakalamak için çalışma süresi ve TLS izleme yığınınıza sertifika zinciri doğrulaması ekleyin. Sensagraph, otomatik TLS taramasının bir parçası olarak eksik sertifika zincirlerini tespit eder.
Referanslar
- RFC 5280 – İnternet X.509 PKI Sertifikası ve CRL Profili (IETF)
- RFC 8446 – TLS Protokolü Sürüm 1.3 (IETF)
- RFC 5246 – TLS Protokolü Sürüm 1.2 (IETF)
- OWASP Top 10 A02:2021 – Kriptografik Başarısızlıklar
- CWE-295: Hatalı Sertifika Doğrulaması (MITRE)
- SSL Labs SSL Sunucu Testi – Qualys
- OWASP Taşıma Katmanı Güvenliği Kopya Kağıdı