Celil Uyanikoglu

HTTPS Nedir? HTTP ile Farkı ve SSL Sertifikası Kontrolü

C Celil Uyanikoglu · 17 Şub 2026 · 10 dk okuma

HTTPS Protokolünün Temelleri

HTTPS (Hypertext Transfer Protocol Secure), web tarayıcınız ile sunucu arasındaki veri alışverişini şifreleyen protokoldür. HTTP'nin üzerine SSL/TLS şifreleme katmanı eklenerek oluşturulmuştur. Port 443 üzerinden çalışır ve adres çubuğunda kilit ikonu gösterir.

HTTP ve HTTPS Arasındaki Teknik Farklar

Şifreleme ve Veri Güvenliği

HTTP protokolü düz metin (plain text) olarak veri gönderir. Wireshark gibi paket yakalama araçlarıyla ağdaki trafiği dinlediğinizde tüm içeriği görebilirsiniz. HTTPS ise TLS 1.2 veya TLS 1.3 ile şifrelenmiş veri gönderir.

HTTP'de gönderdiğiniz form verileri, şifreler ve kredi kartı bilgileri şifresiz dolaşır. HTTPS'de aynı veriler AES-256 veya ChaCha20 gibi algoritmalarla şifrelenir. Man-in-the-middle saldırılarına karşı koruma sağlar.

Port Numaraları ve Bağlantı

HTTP varsayılan olarak 80 portunu kullanır. HTTPS ise 443 portunu kullanır. Sunucu yapılandırmasında bu portları değiştirebilirsiniz ama standart kullanım bu şekildedir. Örnek URL yapısı: http://ornek.com:80 ve https://ornek.com:443 şeklindedir.

SEO ve Tarayıcı Davranışı

Google 2014'ten beri HTTPS'i ranking faktörü olarak kullanır. Chrome 68 ve sonrası HTTP sitelerini "Güvenli Değil" olarak işaretler. Firefox ve Safari de benzer uyarılar gösterir. Modern tarayıcılar HTTP sitelerinde form doldurmayı engeller veya uyarı verir.

 

SSL sertifikası doğrulama ve veri şifreleme süreci

 

SSL/TLS Sertifikası Nasıl Çalışır

Sertifika Türleri

Domain Validated (DV) sertifikalar sadece domain sahipliğini doğrular. Let's Encrypt ücretsiz DV sertifikası verir, 90 günlük geçerlilik süresi vardır. Organization Validated (OV) sertifikalar şirket bilgilerini doğrular. Extended Validation (EV) sertifikalar en kapsamlı doğrulamayı yapar, adres çubuğunda şirket adını gösterir.

Sertifika Zinciri ve CA Yapısı

Root CA (Certificate Authority) en üst otoritedir. Tarayıcılar root CA'ların public keylerini içinde bulundurur. Intermediate CA'lar root CA tarafından imzalanır. Site sertifikası ise intermediate CA tarafından imzalanır. Bu zincir trust chain olarak adlandırılır.

Sertifika doğrulaması şöyle çalışır: Tarayıcı sunucudan sertifikayı alır, intermediate sertifikaları kontrol eder, root CA'ya kadar zinciri takip eder. Zincirde kopukluk varsa "NET::ERR_CERT_AUTHORITY_INVALID" hatası alırsınız.

TLS Handshake Süreci

İstemci sunucuya "Client Hello" mesajı gönderir, desteklediği TLS versiyonlarını ve cipher suite'leri belirtir. Sunucu "Server Hello" ile TLS versiyonunu ve cipher'ı seçer, sertifikasını gönderir. İstemci sertifikayı doğrular, pre-master secret oluşturur ve sunucunun public key'i ile şifreler.

Her iki taraf session key'leri türetir. "Finished" mesajları gönderilerek handshake tamamlanır. Tüm süreç 1-2 RTT (Round Trip Time) alır. TLS 1.3'te bu süre optimize edilmiştir, 0-RTT modu bile vardır.

SSL Sertifikası Kontrol Yöntemleri

Tarayıcı Üzerinden Kontrol

Chrome'da adres çubuğundaki kilit ikonuna tıklayın. "Bağlantı güvenlidir" yazısına tıkladıktan sonra "Sertifika geçerlidir" bölümüne tıklayın. Sertifika detaylarında Issued To, Issued By, Valid From ve Valid To bilgilerini görürsünüz.

Firefox'ta kilit ikonuna tıklayıp "Bağlantı Güvenli" > "Daha fazla bilgi" > "Sertifikayı Görüntüle" yolunu izleyin. Sertifika zincirini, public key algoritmasını ve signature algoritmasını buradan kontrol edebilirsiniz. Subject Alternative Names (SAN) bölümünde sertifikanın geçerli olduğu tüm domainleri görürsünüz.

OpenSSL ile Komut Satırı Kontrolü

OpenSSL ile sertifika bilgilerini çekmek için şu komutu kullanın:

openssl s_client -connect ornek.com:443 -servername ornek.com < /dev/null

Sertifika zincirini görmek için:

openssl s_client -connect ornek.com:443 -showcerts

Sadece son kullanma tarihini öğrenmek için:

echo | openssl s_client -servername ornek.com -connect ornek.com:443 2>/dev/null | openssl x509 -noout -dates

Sertifikayı dosyaya kaydetmek ve detaylı incelemek için:

echo | openssl s_client -servername ornek.com -connect ornek.com:443 2>/dev/null | openssl x509 -out cert.pem
openssl x509 -in cert.pem -text -noout

 

Tarayıcıda HTTPS ve SSL kontrolü

 

Online SSL Kontrol Araçları

SSL Labs'ın SSL Server Test aracı (ssllabs.com/ssltest) kapsamlı analiz yapar. Sertifika geçerliliği, protokol desteği, cipher suite güvenliği ve yaygın güvenlik açıklarını kontrol eder. A+ ile F arası notlandırma yapar.

Test sonuçlarında Certificate #1 bölümünde sertifika detaylarını bulursunuz. Configuration bölümü TLS 1.0, 1.1, 1.2, 1.3 desteğini gösterir. Protocol Details kısmında Forward Secrecy, HSTS, OCSP Stapling gibi güvenlik özelliklerini listeler.

curl ile Hızlı Kontrol

curl komutu ile sertifika bilgilerini alabilirsiniz:

curl -vI https://ornek.com 2>&1 | grep -i "SSL\|TLS\|expire"

Sertifika hatalarını görmezden gelmeden test etmek için:

curl -I https://ornek.com

Self-signed sertifikalarda -k parametresi ile doğrulamayı atlayabilirsiniz ama production ortamında kullanmayın:

curl -Ik https://ornek.com

Sertifika Yükleme ve Yapılandırma

Apache Web Sunucusunda SSL Kurulumu

Apache'de SSL modülünü etkinleştirin:

sudo a2enmod ssl
sudo systemctl restart apache2

Virtual host yapılandırması /etc/apache2/sites-available/default-ssl.conf dosyasında yapılır:

<VirtualHost *:443>
    ServerName ornek.com
    SSLEngine on
    SSLCertificateFile /path/to/certificate.crt
    SSLCertificateKeyFile /path/to/private.key
    SSLCertificateChainFile /path/to/chain.crt
</VirtualHost>

Yapılandırmayı test edin ve aktif edin:

sudo apache2ctl configtest
sudo a2ensite default-ssl
sudo systemctl reload apache2

Nginx'te SSL Yapılandırması

Nginx'te /etc/nginx/sites-available/default veya özel bir conf dosyasına şu satırları ekleyin:

server {
    listen 443 ssl http2;
    server_name ornek.com;
    
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
}

HTTP'den HTTPS'e yönlendirme için:

server {
    listen 80;
    server_name ornek.com;
    return 301 https://$server_name$request_uri;
}

Yapılandırmayı test edin:

sudo nginx -t
sudo systemctl reload nginx

Let's Encrypt ile Ücretsiz SSL

Certbot kurulumu Ubuntu/Debian için:

sudo apt update
sudo apt install certbot python3-certbot-apache

Nginx için python3-certbot-nginx paketini kullanın. Sertifika almak için:

sudo certbot --apache -d ornek.com -d www.ornek.com

Certbot otomatik yenileme için cron job oluşturur. Manuel test için:

sudo certbot renew --dry-run

Yenileme işlemi 90 günde bir gerekir, certbot timer service bunu otomatik yapar:

sudo systemctl status certbot.timer

Dikkat Edilmesi Gereken Güvenlik Noktaları

Mixed Content Sorunları

HTTPS sayfanızda HTTP kaynak yüklemeyin. CSS, JavaScript, resim gibi tüm kaynaklar HTTPS olmalı. Tarayıcılar mixed content'i engeller veya uyarı gösterir. Console'da "Mixed Content" hatası alırsanız kaynak URL'lerini HTTPS'e çevirin.

Relative URL kullanarak bu sorunu önleyebilirsiniz. "/images/logo.png" yerine "//images/logo.png" veya tam URL "https://ornek.com/images/logo.png" kullanın. Content Security Policy (CSP) header'ı ile mixed content'i engelleyebilirsiniz.

HSTS Implementasyonu

HTTP Strict Transport Security (HSTS) tarayıcıyı her zaman HTTPS kullanmaya zorlar. Apache'de header eklemek için:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Nginx'te:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

max-age değeri saniye cinsinden, 31536000 bir yıla eşittir. includeSubDomains tüm alt domainleri kapsar. preload parametresi ile siteyi HSTS preload listesine ekletebilirsiniz.

Sertifika Yenileme ve Monitoring

Sertifika süresi dolmadan 30 gün önce yenileme işlemi başlatın. Monitoring için certwatch veya özel scriptler kullanın. Basit bir kontrol scripti:

#!/bin/bash
DOMAIN="ornek.com"
EXPIRY=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_EPOCH - $NOW_EPOCH) / 86400 ))
if [ $DAYS_LEFT -lt 30 ]; then
    echo "Uyarı: Sertifika $DAYS_LEFT gün sonra sona erecek!"
fi

Private Key Güvenliği

Private key dosyalarının izinleri 600 olmalı, sadece root okuyabilmeli:

chmod 600 /path/to/private.key
chown root:root /path/to/private.key

Private key'i asla version control sistemine eklemeyin. Backup alırken şifreli saklayın. Key compromise durumunda hemen sertifikayı revoke edin ve yeni key pair oluşturun.

Sertifika Revocation Kontrolleri

OCSP ve CRL

Online Certificate Status Protocol (OCSP) sertifikanın revoke edilip edilmediğini kontrol eder. Certificate Revocation List (CRL) ise iptal edilmiş sertifikaların listesidir. OCSP daha hızlıdır, gerçek zamanlı sorgular.

OCSP kontrolü yapmak için:

openssl ocsp -issuer chain.pem -cert cert.pem -url http://ocsp.example.com -text

OCSP Stapling

OCSP Stapling ile sunucu OCSP yanıtını önceden alır ve TLS handshake sırasında gönderir. Bu privacy ve performance avantajı sağlar. Nginx'te etkinleştirmek için:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/chain.pem;

Apache'de:

SSLUseStapling on
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

Özet

HTTPS modern web güvenliğinin temelidir. SSL/TLS sertifikaları ile şifreli iletişim sağlar, man-in-the-middle saldırılarını önler. Let's Encrypt gibi ücretsiz seçenekler her site için HTTPS'i erişilebilir kılar.

Sertifika kontrollerini düzenli yapın, yenileme süreçlerini otomatize edin. HSTS, OCSP Stapling gibi ek güvenlik katmanları ekleyin. Mixed content sorunlarına dikkat edin, tüm kaynakları HTTPS üzerinden sunun.

OpenSSL ve curl gibi komut satırı araçları ile sertifika detaylarını kontrol edebilirsiniz. SSL Labs gibi online araçlar kapsamlı güvenlik analizi yapar. Sunucu yapılandırmanızda modern TLS versiyonları ve güçlü cipher suite'ler kullanın.

Sıkça Sorulan Sorular

Wildcard SSL sertifikası ne işe yarar?

Wildcard sertifika (*.ornek.com) tüm alt domainleri kapsar. blog.ornek.com, shop.ornek.com gibi tüm subdomain'ler aynı sertifikayı kullanır. Her subdomain için ayrı sertifika almaya gerek kalmaz. Maliyet ve yönetim açısından avantajlıdır ama multi-level subdomain'leri (api.v1.ornek.com) kapsamaz.

Self-signed sertifika ne zaman kullanılır?

Self-signed sertifikalar test ortamları, internal ağlar ve development için uygundur. Production'da kesinlikle kullanmayın, tarayıcılar güvenlik uyarısı gösterir. openssl req komutu ile oluşturulur. Let's Encrypt ücretsiz olduğu için public siteler için self-signed kullanmaya gerek yok.

TLS 1.0 ve 1.1 neden devre dışı bırakılmalı?

TLS 1.0 ve 1.1 eski protokollerdir, bilinen güvenlik açıkları içerir. BEAST, POODLE gibi saldırılara karşı savunmasızdır. PCI DSS 3.2 standardı bu versiyonları yasaklamıştır. Sadece TLS 1.2 ve TLS 1.3 kullanın. Modern tarayıcıların hepsi bu versiyonları destekler.

SNI (Server Name Indication) nedir?

SNI, tek IP adresinde birden fazla SSL sertifikası kullanmanızı sağlar. TLS handshake sırasında istemci hangi domain'e bağlanmak istediğini belirtir. Sunucu doğru sertifikayı gönderir. Apache ve Nginx varsayılan olarak SNI destekler. Eski tarayıcılar (IE6, Android 2.x) SNI desteklemez.

Certificate pinning ne işe yarar?

Certificate pinning ile uygulamanız sadece belirli sertifikaları veya public key'leri kabul eder. Sahte CA saldırılarına karşı ekstra koruma sağlar. Mobile uygulamalarda yaygın kullanılır. HTTP Public Key Pinning (HPKP) header'ı web için kullanılabilir ama dikkatli olmak gerek, yanlış yapılandırma siteyi erişilemez yapar.

0 Yorum

Yorum Yaz