HTTPS (Hypertext Transfer Protocol Secure)
HTTPS, HTTP protokolünün güvenli versiyonudur. Web tarayıcınız ile ziyaret ettiğiniz web sitesi arasında veri iletimini şifreleyerek güvenli bir bağlantı sağlar. Temel olarak, HTTP protokolünün üzerine SSL/TLS (Secure Sockets Layer/Transport Layer Security) adlı bir şifreleme katmanı eklenerek çalışır. HTTPS, özellikle hassas bilgilerin (kredi kartı numaraları, şifreler, kişisel veriler vb.) internet üzerinden aktarıldığı durumlarda hayati öneme sahiptir.
HTTPS'in Sağladığı Faydalar:
1. Şifreleme (Encryption): Tarayıcı ile sunucu arasında aktarılan tüm verilerin şifrelenmesini sağlar. Bu, kötü niyetli kişilerin verileri ele geçirmesi durumunda bile okunamaz olmasını garanti eder. Bu sayede gizlilik (confidentiality) sağlanır.
2. Veri Bütünlüğü (Data Integrity): Aktarım sırasında verilerin değiştirilmediğini veya bozulmadığını garanti eder. Herhangi bir değişiklik algılanırsa bağlantı kesilir veya uyarı verilir.
3. Kimlik Doğrulama (Authentication): Ziyaret ettiğiniz web sitesinin gerçekten iddia ettiği site olduğunu doğrular. Bu, 'Man-in-the-Middle' (Ortadaki Adam) saldırılarını önlemeye yardımcı olur. Sunucunun kimliği, bir Sertifika Yetkilisi (CA) tarafından verilmiş SSL/TLS sertifikası aracılığıyla doğrulanır.
SSL/TLS (Secure Sockets Layer / Transport Layer Security)
SSL (Secure Sockets Layer), Netscape tarafından geliştirilen ve web iletişimi için şifreleme sağlayan ilk protokoldü. Ancak güvenlik açıklarının bulunması nedeniyle, IETF (Internet Engineering Task Force) tarafından TLS (Transport Layer Security) adı altında geliştirilmiş ve standartlaştırılmış bir halefi yayınlandı. Günümüzde kullanılan çoğu 'SSL' terimi aslında TLS'nin modern versiyonlarını ifade etmektedir.
SSL/TLS, uygulama katmanının (örneğin HTTP) hemen altında ve taşıma katmanının (örneğin TCP) hemen üstünde çalışan bir şifreleme protokolüdür. Amacı, ağ üzerinden iletişim kuran iki taraf arasında güvenli bir kanal oluşturmaktır.
SSL/TLS'in Çalışma Prensibi (Basitçe):
1. El Sıkışma (Handshake): Tarayıcı ve web sunucusu bir bağlantı kurduğunda, bir 'el sıkışma' süreci gerçekleşir. Bu süreçte şifreleme algoritmaları ve anahtarlar üzerinde anlaşılır.
2. Sertifika Değişimi: Sunucu, tarayıcıya SSL/TLS sertifikasını gönderir. Bu sertifika, sunucunun kamu anahtarını, alan adını ve sertifikayı veren Sertifika Yetkilisi'nin (CA) bilgilerini içerir.
3. Sertifika Doğrulama: Tarayıcı, sertifikanın geçerliliğini ve güvenilirliğini (bir CA tarafından verilmiş mi, süresi dolmuş mu, iptal edilmiş mi vb.) kontrol eder.
4. Anahtar Oluşturma ve Şifreleme: Doğrulama başarılı olursa, tarayıcı ve sunucu, oturuma özel simetrik bir şifreleme anahtarı oluşturur ve bu anahtarı kullanarak tüm iletişimi şifreler.
Sertifika Yetkilileri (Certificate Authorities - CA's):
CA'lar, dijital sertifikalar veren ve yöneten güvenilir üçüncü taraf kuruluşlardır. Bir CA, bir web sitesinin veya kuruluşun kimliğini doğrular ve bu kimliğe dijital bir imza atarak onaylar. Tarayıcılar, önceden yüklenmiş güvenilir CA listelerine sahiptir ve bu CA'lardan herhangi biri tarafından imzalanan sertifikaları otomatik olarak güvenir.
Özetle, SSL/TLS, verilerinizi şifreleyen ve kimliğinizi doğrulayan temel güvenlik protokolüdüdür. HTTPS ise, bu SSL/TLS protokolünü kullanarak HTTP iletişiminizi güvence altına alan bir uygulamadır.
Example Code
```php
<?php
// Bu PHP kodu, gelen HTTP isteklerini otomatik olarak HTTPS'ye yönlendirir.
// Bu, sitenizin her zaman güvenli bir bağlantı üzerinden erişilmesini sağlamak için iyi bir uygulamadır.
// Sunucunun HTTPS üzerinde çalışıp çalışmadığını kontrol edin.
// Bazı sunucu yapılandırmalarında 'HTTPS' değişkeni 'on' veya '1' olabilir,
// bazıları ise 'HTTP_X_FORWARDED_PROTO' gibi bir başlık kullanabilir
// eğer bir yük dengeleyici veya ters proxy arkasında çalışıyorsa.
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === 'off') {
// Yük dengeleyici/proxy arkasında çalışıyorsa X-Forwarded-Proto başlığını kontrol edin
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Zaten HTTPS üzerinden geliyorsa bir şey yapmaya gerek yok
// Bu senaryoda $_SERVER['HTTPS'] 'off' olabilir ancak aslında güvenli bir bağlantıdır.
} else {
// HTTPS üzerinden gelmiyorsa, HTTPS'ye yönlendirme yapın.
$redirectUrl = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// 301 Moved Permanently durum kodu, tarayıcılara ve arama motorlarına
// bu kaynağın kalıcı olarak yeni bir konuma taşındığını bildirir.
// Bu SEO için önemlidir.
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirectUrl);
exit(); // Yönlendirme sonrası betiği durdurmak önemlidir.
}
}
// Eğer kod buraya ulaştıysa, istek HTTPS üzerinden gelmiştir (veya proxy tarafından HTTPS olarak işaretlenmiştir).
// Bu noktadan sonra uygulamanızın güvenli içeriğini sunabilirsiniz.
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Güvenli Sayfa</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; }
h1 { color: #28a745; }
p { color: #333; }
</style>
</head>
<body>
<h1>Bu sayfa HTTPS üzerinden güvenli bir şekilde sunulmaktadır!</h1>
<p>URL adresinizde 'https://' ibaresini kontrol edin.</p>
<p>Ek bilgi: Protokol: <?php echo htmlspecialchars($_SERVER['SERVER_PROTOCOL']); ?></p>
<p>Ek bilgi: Host: <?php echo htmlspecialchars($_SERVER['HTTP_HOST']); ?></p>
</body>
</html>
```








HTTPS ve SSL