🔐 SSL Doğrulama Etkinleştirme Rehberi
Bu rehberde SSL doğrulamanın nasıl çalıştığını, neden kritik olduğunu ve hem sunucularda hem uygulama kodlarında nasıl etkinleştirileceğini öğreneceksiniz. Ayrıca zincir doğrulaması, CA güveni, tarayıcıların kontrol süreci, CLI araçları ve yaygın hataların çözüm yollarını da göreceksiniz.
📌 Bu Rehberde Ne Öğreneceksiniz?
- SSL doğrulamanın temel mantığı
- Sertifika zincirinin neden önemli olduğu
- Tarayıcıların doğrulamayı nasıl yaptığı
- OpenSSL ve curl ile manuel test
- Python ve Node.js’te doğrulama
- Self-signed sertifika güvenliği
- En iyi SSL güvenlik uygulamaları
- Yaygın hatalar ve çözümleri
1. 🧠 SSL Doğrulaması Nedir?
SSL doğrulama, istemcinin bağlandığı sunucunun gerçekten doğru sunucu olduğunu kanıtlayan güvenlik sürecidir. Bu süreçte istemci sertifikanın:
- Geçerli
- Güvenilir bir CA tarafından imzalanmış
- Doğru alan adını içeren
- Tam zincire sahip
- Süresi geçmemiş
- İptal edilmemiş
olduğunu kontrol eder.
Başarısız olursa bağlantı kesilir ve hata oluşur:
SSL: CERTIFICATE_VERIFY_FAILED
2. ⚠️ SSL Doğrulaması Neden Kritik?
- Kimlik Doğrulama: Sunucu sahte değil.
- MITM Koruması: Araya giren saldırgan engellenir.
- Güven Zinciri: Sertifika güvenilir bir CA’dan gelir.
- Veri Bütünlüğü: Veri değiştirilmeden iletilir.
Şifreleme (encryption) veriyi korur, doğrulama ise kime gönderdiğini doğrular.
İkisi birlikte tam güvenlik sağlar.
🔍 SSL Doğrulama Adımları
1. CA (Sertifika Otoritesi) Doğrulaması
Tarayıcı, sertifikayı imzalayan CA’nın güvenilir olup olmadığını kontrol eder.
Örnek güvenilir CA’lar:
- Let’s Encrypt
- DigiCert
- GlobalSign
2. Alan Adı (Domain) Eşleşmesi
Sertifikadaki CN veya SAN alanlarının siteyle uyumlu olması gerekir.
api.rabisu.cloud için sertifika api.rabisu.cloud içermelidir.
3. Sertifika Zinciri Doğrulaması
Doğrulama şu sırayı izler:
Leaf Certificate → Intermediate CA → Root CA
Eğer ara CA eksikse istemci zinciri tamamlayamaz.
Örnek zincir tablosu:
| Katman | Amaç | Örnek |
|---|---|---|
| Root CA | Güvenin temeli | DigiCert Root |
| Intermediate CA | Leaf sertifikaları imzalar | Let’s Encrypt R3 |
| Leaf (Sunucu) | Sunucuya kurulan sertifika | rabisu.cloud |
4. Süre ve İptal Kontrolü
Sertifika geçerli tarihlerde olmalı.
OCSP ve CRL ile iptal durumu kontrol edilebilir.
🧬 Sertifika Zinciri Nasıl Çalışır?
Zincir, tam gönderilmezse birçok cihaz sertifikayı geçersiz olarak yorumlar.
Bu nedenle Nginx/Apache yapılandırmasında fullchain.pem kullanılır.
İstemci zinciri şu şekilde doğrular:
- Leaf sertifikayı alır
- Ara CA sertifikasını görür
- Root CA’ya uzanan güvenli zincir oluşturur
- Zincir tamamsa doğrulama başarılı olur
2. 🌐 Tarayıcılar SSL Doğrulamasını Nasıl Yapar?
Tarayıcının HTTPS akışı:
- DNS çözümü yapar.
- Sunucuya TCP bağlantısı kurar.
- TLS handshake başlar.
- Sertifika zinciri alınır.
- CA imzası kontrol edilir.
- Alan adı eşleşmesi yapılır.
- OCSP/CRL ile iptal kontrolü yapılabilir.
- Tüm adımlar geçerse sayfa yüklenir.
Hata durumunda:
- Chrome:
ERR_CERT_COMMON_NAME_INVALID - Firefox:
SEC_ERROR_UNKNOWN_ISSUER
🛠️ CLI ile SSL Doğrulama
1. OpenSSL ile Zincir Kontrolü
openssl s_client -connect rabisu.cloud:443 -servername rabisu.cloud -showcerts
➡️ Bu komut sunucudan gelen sertifika zincirini gösterir.
1.2 curl ile HTTPS Doğrulama
curl -v https://rabisu.cloud
➡️ Bu komut TLS el sıkışmasını detaylı gösterir.
1.3 Yerel Sertifika Doğrulama
openssl verify -CAfile zincir.pem sunucu.pem
➡️ Bu komut sertifikayı zincir dosyasına göre doğrular.
2.🧩 SSL Doğrulama vs SSL Şifreleme
| Özellik | Doğrulama | Şifreleme |
|---|---|---|
| Amaç | Sunucuyu doğrular | Veriyi gizler |
| Aşama | Handshake sırasında | Bağlantı kurulduktan sonra |
| Koruma | MITM saldırıları | Veri dinleme |
| Gereksinim | CA zinciri | Güçlü TLS protokolü |
2.1 🔌 Kodlarda SSL Doğrulaması
2.1.1 Python – Requests
import requests
resp = requests.get("https://api.rabisu.cloud", timeout=10)
print(resp.status_code)
➡️ Requests kütüphanesi SSL doğrulamayı varsayılan olarak yapar.
javascript
const axios = require('axios');
const agent = new (require('https').Agent)({ rejectUnauthorized: true });
function makeSecureRequest() {
axios.get('https://api.rabisu.cloud', { httpsAgent: agent })
.then(res => console.log("Başarılı:", res.status))
.catch(err => console.error("Hata:", err.message));
}
makeSecureRequest();
➡️ rejectUnauthorized:true sertifika doğrulamasını zorunlu kılar.
2. 🧱 Kendi İmzalı (Self-Signed) Sertifikalar
-
Sadece iç ağlarda kullanılmalıdır.
-
Üretim için CA sertifikası şarttır.
-
İstemcilere manuel olarak güvenilir CA olarak eklenmelidir.
2.2 🧯 Yaygın SSL Doğrulama Hataları ve Çözümü
| Hata | Sebep | Çözüm |
|---|---|---|
| CERTIFICATE_VERIFY_FAILED | Eksik ara CA | fullchain kullan |
| curl (60) | Süresi dolmuş sertifika | Yenile |
| Hostname mismatch | CN/SAN hatalı | Yeni sertifika |
| Unknown issuer | Güvenilir olmayan CA | CA değiştir |
| OCSP error | İptal sunucusu kapalı | OCSP stapling |
2.3 📚 En İyi SSL Güvenlik Pratikleri
-
Güvenilir CA kullanın
-
Otomatik yenileme yapın
-
TLS 1.2+ zorunlu kılın
-
Fullchain.pem yükleyin
-
HSTS başlığını etkinleştirin
-
Düzenli SSL testleri yapın
-
Sunucuyu güncel tutun
2.4 🔧 SSL: CERTIFICATE_VERIFY_FAILED Hatası Nasıl Düzeltilir?
Bu hata, istemcinin sunucunun SSL sertifikasını doğrulayamaması sonucu oluşur.
Nedenleri ve çözüm yolları aşağıdadır.
✅ 3. Sertifika Süresi Kontrolü
openssl x509 -in sunucu.crt -noout -dates
➡️ Sertifika tarih dışıysa yenileme yapılmalıdır.
✅ 2. Sertifika Güvenilir Değil
openssl x509 -in sunucu.crt -noout -issuer
➡️ CA güvenilir değilse Let’s Encrypt veya ticari bir CA’dan yeni sertifika alın.
✅ 3. Alan Adı Doğru Değil
openssl x509 -in sunucu.crt -noout -subject
➡️ CN veya SAN alanları domain ile eşleşmelidir.
✅ 4. Ara CA Eksikliği
openssl s_client -connect site.com:443 -servername site.com
➡️ Çıktıda ara CA yoksa, fullchain.pem yükleyin.
✅ 5. Sertifika İptal Edilmiş
openssl ocsp -issuer ca.crt -cert sunucu.crt -url http://ocsp.ornek.com
➡️ İptal edilmişse yeni sertifika alınmalıdır.
| Başlık | Doğrulama | Şifreleme |
|---|---|---|
| Amaç | Kimlik doğrulama | Veri gizleme |
| Koruma | MITM saldırıları | Veri hırsızlığı |
| Gereklilik | CA zinciri | Güçlü şifreleme |
| Zamanlama | Handshake sırasında | Bağlantı kurulduktan sonra |
Bu iki teknoloji birlikte çalışarak tam güvenlik sağlar.
3.2🌍 Online SSL Test Araçları
✔ SSL Labs Tam kapsamlı SSL testi sağlar: https://www.ssllabs.com/ssltest/
✔ DigiCert SSL Checker Kurulum hatalarını tespit eder: https://www.digicert.com/help/
Bu araçlar:
Zincir hataları
Zayıf şifre takımları
Protokol uyumsuzlukları
HSTS eksikleri gibi birçok sorunu gösterir.
3.1 ⚡ Uygulama Kodlarında SSL Doğrulamasını Zorunlu Kılma
Python — doğrulama açık (varsayılan)
import requests
resp = requests.get("https://api.rabisu.cloud", timeout=10)
print(resp.status_code)
➡️ verify=True otomatik aktiftir. Sertifika hatalıysa istek başarısız olur.
3.1.1 Node.js — SSL doğrulaması zorunlu
const axios = require('axios');
const https = require('https');
const agent = new https.Agent({ rejectUnauthorized: true });
axios.get("https://api.rabisu.cloud", { httpsAgent: agent })
.then(res => console.log("Başarılı:", res.status))
.catch(err => console.error("Hata:", err.message));
➡️ rejectUnauthorized sertifika doğrulaması yapılmasını garanti eder.
3.1.2 🔒 Self-Signed Sertifikaları Güvenli Kullanma
Self-signed sertifikalar yalnızca:
Test ortamlarında
İç ağlarda
Geliştirme makinelerinde
kullanılmalıdır.
Güvenli kullanım için:
Sertifikayı istemcilerin CA deposuna ekleyin.
TLS 1.2+ kullanın.
Sertifikayı düzenli yenileyin.
Kullanıcıları bilgilendirin.
Üretim ortamında mutlaka CA imzalı sertifika kullanılmalıdır.
4. 🧱 En İyi SSL Güvenlik Pratikleri
1. CA’den alınmış sertifika kullanın Let’s Encrypt veya ticari CA seçin.
2. Sertifikaları otomatik yenileyin Certbot renew gibi mekanizmalar kullanın.
3. TLS 1.2 veya 1.3 aktif edin Eski versiyonları kapatın: TLS 1.0, 1.1, SSLv3.
4. Fullchain.pem yükleyin Ara CA eksikliği en yaygın hatadır.
5. HSTS kullanın Sunucuyu hep HTTPS kullanmaya zorlar.
6. OCSP Stapling etkinleştirin Performans ve güvenilirlik artar.
7. Düzenli SSL testleri yapın SSL Labs, DigiCert araçlarını kullanın.
| Hata Kodu | Sebep | Çözüm |
|---|---|---|
| CERTIFICATE_VERIFY_FAILED | Zincir eksik | fullchain yükle |
| curl: (60) | Self-signed / süresi dolmuş | Yeni sertifika |
| SSLHandshakeException | Alan adı hatalı | CN/SAN düzelt |
| Unknown issuer | CA güvenilmez | Güvenilir CA al |
| Peer verification failed | Trust store eski | OS güncellemesi |
| Mixed content | HTTP kaynaklar | HTTPS’le değiştir |
❓ Gelişmiş SSS
1. SSL doğrulaması neden başarısız olur?
En sık sebep: eksik ara CA zinciri.
2. curl -k veya verify=False kullanmak güvenli midir?
Hayır. MITM saldırılarına kapı açar.
3. Self-signed sertifika dış dünyada kullanılabilir mi?
Hayır. Sadece test ve iç sistemlerde.
4. Zincir eksikse ne olur?
Tarayıcı kök CA’ya ulaşamaz ve hata verir.
5. Sertifika yenilerken hizmet kesilir mi?
Doğru yapılandırmada kesinti olmaz.
6. SSL doğrulama devre dışı bırakılabilir mi? Evet, ama çok tehlikelidir. MITM saldırıları için kapı aralar.
7. Sertifika zincirini nasıl görebilirim?
openssl s_client -connect site.com:443 -showcerts
8. Doğrulama neden bazı cihazlarda çalışıp bazılarında çalışmıyor? Eski cihazlarda CA deposu güncel değildir.
9. HSTS nedir? Tarayıcıyı HTTP yerine zorunlu HTTPS kullanmaya zorlar.
10. Let’s Encrypt güvenli midir? Evet. Dünyada en çok kullanılan CA’dır.
🏁 Sonuç
SSL doğrulama, güvenli iletişimin temel yapı taşıdır. Bu rehberde CA kontrolünden zincir doğrulamasına, uygulama kodlarından CLI komutlarına kadar tüm süreci öğrendiniz. Güvenli bağlantı → Güçlü kullanıcı deneyimi. İyi yapılandırılmış SSL her projenin temelidir.
Sertifika zincirinizi doğru oluşturun, doğrulamanızı aktif tutun ve TLS yapılandırmanızı modern protokollerle güçlendirin. Güvenli bir altyapı için Rabisu Bulut sunucularında bu yapılandırmaları hızla uygulayabilirsiniz.