Tarayıcıda SSL hatası neden görünür?
Bir kullanıcı tarayıcıda SSL hatasıyla karşılaştığında, genellikle ilk tepki "sorun tarayıcıdan kaynaklanıyor" veya "sertifika bozuk" olur. Ancak çoğu durumda sorunun kökeni başka yerdedir: eksik sertifika zinciri, alan adı uyumsuzluğu veya süresi dolmuş sertifika. Bu makalede, her üç durumu da teknik ayrıntılarıyla inceleyeceğiz ve her biri için pratik çözümler sunacağız. Site yöneticisiyseniz veya bulut altyapısı üzerinde çalışıyorsanız, bu rehber SSL hatasını en kısa sürede tespit edip gidermenize yardımcı olacaktır.
1. Eksik Sertifika Zinciri (Incomplete Certificate Chain)
Sertifika zinciri, sunucu sertifikasından kök sertifikaya (Root CA) ulaşan yoldur. Bu zincir eksikse, tarayıcı sertifikanın geçerliliğini doğrulayamaz ve SSL hatası gösterir. Bu sorun genellikle ara sertifikalar (Intermediate Certificates) sunucuya yüklenmediğinde ortaya çıkar.
Zinciri nasıl kontrol ederiz?
Aşağıdaki komutla sertifika zincirini sunucu açısından kontrol edebilirsiniz:
openssl s_client -connect example.com:443 -showcerts
Bu komutun çıktısı, sunucunun gönderdiği tüm sertifikaları içerir. Çıktıda yalnızca bir sertifika (sunucu sertifikası) görüyorsanız ve ara sertifikalar yoksa, zincir eksiktir. Çıktıda Certificate chain bölümlerine dikkat edin. Yalnızca bir BEGIN CERTIFICATE bloğu görüyorsanız, sorun doğrulanmıştır.
Çözüm: Ara sertifikaları yükleme
Çoğu sertifika yetkilisi (CA), ana sertifikayla birlikte ara sertifika dosyalarını da indirir. Nginx web sunucusu için, ara sertifikayı ana sertifika dosyasına eklemeniz gerekir:
cat example.com.crt intermediate.crt > fullchain.crt
Ardından Nginx ayarlarında ssl_certificate yolunu fullchain.crt dosyasına değiştirin ve servisi yeniden başlatın:
sudo systemctl restart nginx
Apache için de SSLCertificateChainFile dosyasını ara sertifikaya yönlendirin. Değişiklikten sonra, zincirde en az iki veya üç sertifikanın gönderildiğini openssl s_client komutuyla tekrar kontrol ettiğinizden emin olun.
Yaygın hata: Bazıları ara sertifikaları sertifika dosyasına eklemek yerine yanlış yola koyar veya dosyayı yanlış formatta (örneğin PEM yerine DER) kaydeder. Dosyaların her zaman PEM formatında (başlığı BEGIN CERTIFICATE olan düz metin) olduğundan emin olun.
2. Alan Adı Uyumsuzluğu (Hostname Mismatch)
SSL hatasının bir diğer yaygın nedeni, kullanıcının tarayıcıya girdiği alan adı ile sertifikada kayıtlı alan adı arasındaki uyumsuzluktur. Bu hata genellikle "güvenlik adı geçersiz" veya "sertifika bu site için düzenlenmemiş" mesajıyla gösterilir.
Uyumsuzluk türleri
- Ana alan adı ve alt alan adı: Sertifika
example.comiçin düzenlenmiş ancak kullanıcıwww.example.comadresine gidiyor. - Benzer alan adları: Sertifika
example.comiçin ancak kullanıcıexample.orgadresine gidiyor. - Doğrudan IP adresi: Kullanıcı siteye IP adresiyle erişiyor, ancak sertifika yalnızca alan adı için düzenlenmiş.
openssl komutuyla kontrol
Sertifikanın hangi alan adları için düzenlendiğini kontrol etmek için aşağıdaki komutu kullanın:
openssl x509 -in certificate.crt -noout -text | grep -A 1 "Subject Alternative Name"
Çıktı, geçerli alan adlarının listesini içerir. İlgili alan adı bu listede yoksa, sorun sertifikadan kaynaklanıyor demektir.
Çözümler
- Doğru alan adıyla yeni sertifika: Sertifika yanlış alan adı için düzenlenmişse, doğru alan adıyla yeni bir sertifika almanız gerekir.
- Yönlendirme ayarı: Sertifika
example.comiçin ancak kullanıcılarwww.example.comadresine gidiyorsa,wwwadresinden ana alan adına 301 yönlendirmesi ayarlayın:
server {
listen 443 ssl;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
Bu, kullanıcıların her zaman sertifikanın geçerli olduğu alan adına yönlendirilmesini sağlar.
Yaygın hata: Bazı site yöneticileri sertifikayı www olmadan düzenler ancak yönlendirme ayarlamayı unutur. Sonuç: www ile giren kullanıcılar SSL hatası görür. Sertifikayı yükledikten sonra her iki durumu da (www'li ve www'siz) test edin.
3. Süresi Dolmuş Sertifika (Expired Certificate)
SSL sertifikalarının son kullanma tarihi vardır ve genellikle 1 ila 2 yıl arasında geçerlidir. Sertifikanın süresi dolduğunda, tarayıcı "güvenlik sertifikasının süresi doldu" hatasını gösterir. Bu sorun en basit durumdur ancak zamanında tespit edilmezse kullanıcı güveninin kaybolmasına neden olabilir.
Son kullanma tarihini kontrol etme
Aşağıdaki komutla sertifikanın son kullanma tarihini uzaktan kontrol edebilirsiniz:
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
Çıktı iki tarih içerir: notBefore (geçerlilik başlangıç tarihi) ve notAfter (son kullanma tarihi). Geçerli tarih notAfter tarihinden sonraysa, sertifikanın süresi dolmuştur.
Çözüm: Otomatik yenileme
Bu sorunu önlemenin en iyi yolu otomatik yenileme kullanmaktır. Let's Encrypt kullanıyorsanız, aşağıdaki cronjob ile otomatik yenilemeyi ayarlayabilirsiniz:
0 3 * * * certbot renew --quiet --deploy-hook "systemctl reload nginx"
Bu komut her gün saat 3'te sertifikanın süresinin dolmak üzere olup olmadığını (30 günden az kaldıysa) kontrol eder ve gerekirse yeniler. Ticari CA'lardan satın alınan sertifikalar için genellikle e-posta hatırlatıcısı ayarlayabilir veya otomatik yenileme için sertifika yetkilisinin API'sini kullanabilirsiniz.
Yaygın hata: Bazı site yöneticileri sertifikayı yeniler ancak yeni sertifika dosyasını sunucuya yüklemeyi unutur. Yenilemeden sonra yeni dosyaları indirip sunucuya yüklediğinizden ve web servisini yeniden başlattığınızdan emin olun.
4. Bilmeniz Gereken Diğer SSL Hataları
Üç ana sorunun yanı sıra, karşılaşabileceğiniz başka hatalar da vardır:
Kendi Kendine İmzalı Sertifika (Self-Signed Certificate)
Sertifika geçerli bir CA tarafından düzenlenmemişse (örneğin test ortamı için), tarayıcı "bağlantı güvenli değil" hatası gösterir. Üretim ortamı için asla kendi kendine imzalı sertifika kullanmayın. Test için kendi kendine imzalı sertifika oluşturabilirsiniz ancak tarayıcıda istisna olarak eklemeniz gerekir.
Eski TLS protokolleri
Sunucunuz yalnızca TLS 1.0 veya TLS 1.1 destekliyorsa, modern tarayıcılar hata gösterir. Desteklenen TLS sürümlerini kontrol etmek için:
openssl s_client -connect example.com:443 -tls1_2
Bu komut hata veriyorsa, TLS 1.2 desteklenmiyor demektir. Nginx'te izin verilen protokolleri ayarlayabilirsiniz:
ssl_protocols TLSv1.2 TLSv1.3;
Sistem tarihi uyumsuzluğu
Kullanıcının (veya sunucunun) sistem tarihi ve saati yanlışsa, tarayıcı SSL hatası gösterebilir. Bu sorun daha az yaygındır ancak her şey doğru görünüyorsa sistem tarihini kontrol edin.
5. SSL Hatası Giderme İçin Yardımcı Araçlar
Sorunları daha hızlı teşhis etmek için aşağıdaki araçları kullanın:
- SSL Labs (ssllabs.com): Sertifika ve sunucu yapılandırmasının tam analizini sunar.
- Why No Padlock (whynopadlock.com): SSL hatasına neden olan mixed content'i bulmak için.
- Ayrıntılı seçeneklerle curl: Hataları komut satırından kontrol etmek için:
curl -vI https://example.com 2>&1 | grep "SSL"
Bu komut handshake sürecinin tüm ayrıntılarını gösterir ve ara sertifika alamama gibi belirli hataları belirleyebilir.
6. Özet ve Önleme
Tarayıcıdaki SSL hatası genellikle üç ana kaynaktan kaynaklanır: eksik zincir, alan adı uyumsuzluğu ve süresi dolmuş sertifika. Bu üç durumu düzenli olarak kontrol ederek hataların oluşmasını önleyebilirsiniz. Aylık bir kontrol listesi oluşturmanızı öneririz:
- Sertifikanın son kullanma tarihini
opensslile kontrol edin - Sertifika zincirini
openssl s_client -showcertsile kontrol edin www'li vewww'siz erişimi test edin- Desteklenen TLS sürümlerini kontrol edin
Bulut altyapısı kullanıyorsanız, ServerNet kullanıcı panelinde SSL sertifikalarının yönetimini sağlar ve bu da kurulum ve yenileme sürecini kolaylaştırabilir. Ancak her durumda, bu komutlara ve kavramlara aşina olmak, sorunu her koşulda hızlıca çözmenize yardımcı olur.
Son olarak, SSL hatasının yalnızca bir hata mesajı olmadığını unutmayın; zamanında giderilmezse kullanıcı güvenini yok edebilecek ve hatta sitenizin SEO'sunu olumsuz etkileyebilecek teknik bir sorunun işaretidir. Düzenli kontroller ve tanıtılan araçları kullanarak, sitenizin her zaman güvenli bir bağlantıyla erişilebilir olduğundan emin olabilirsiniz.