SSL/TLS Nedir?

Eki 9, 2023

Merhaba arkadaşlar bu yazımızda SSL/TLS işleyişinden bahsedeceğiz.

SSL (Secure Socket Layer) ve TLS (Transport Layer Security), internet trafiğini şifrelemek ve güvenli iletişim sağlamak için kullanılan protokollerdir. Temel amacı, verilerin güvenli bir şekilde iletilmesini ve üçüncü tarafların bu verilere erişimini engellemektir.

SSL, ilk olarak Netscape Communications tarafından geliştirilmiş ve daha sonra TLS olarak standartlaştırılmıştır. TLS, SSL’in güncellenmiş ve daha güvenli bir sürümüdür ve günümüzde daha yaygın olarak kullanılmaktadır. Ancak, genellikle SSL/TLS terimi kullanılarak her ikisi de ifade edilir.

SSL/TLS’in kullanılması, çeşitli nedenlerden dolayı önemlidir:

  1. Veri Güvenliği: SSL/TLS, verilerin şifrelenerek transfer edilmesini sağlar. Bu sayede, verilerin izinsiz kişilerce ele geçirilmesi veya okunması engellenir. Özellikle kullanıcı adları, şifreler, kredi kartı bilgileri ve diğer hassas bilgilerin güvenli bir şekilde aktarılması için SSL/TLS kullanımı önemlidir.
  2. Veri Bütünlüğü: SSL/TLS, veri bütünlüğünü sağlamak için hash algoritmalarını kullanır. Bu sayede, verilerin transfer sırasında değiştirilmediği ve bozulmadığı doğrulanır. Alıcı, gönderilen verinin orijinal olup olmadığını kontrol edebilir.
  3. Kimlik Doğrulama: SSL/TLS, sunucuların dijital sertifikalar kullanarak kimlik doğrulamasını sağlar. Bu sayede, kullanıcılar doğru sunucuya bağlandığından emin olabilirler. Bu, sahte web sitelerine karşı koruma sağlar ve güvenli internet alışverişlerini kolaylaştırır.
  4. SEO Etkisi: SSL/TLS kullanan web siteleri, HTTPS protokolünü kullanarak tarayıcılar tarafından “güvenli” olarak işaretlenir. Arama motorları, HTTPS protokolünü kullanan siteleri tercih eder ve sıralamada ödüllendirir.
  5. Uyumluluk: SSL/TLS, modern web tarayıcıları ve diğer internet uygulamaları tarafından desteklenir. Bir web sitesi, güvenlik sertifikası kullanarak tüm ziyaretçilere uygun ve güvenli bir deneyim sunabilir.

Sonuç olarak, SSL/TLS kullanılması, internet trafiğinin şifrelenmesi, veri güvenliği ve bütünlüğünün sağlanması, kimlik doğrulama ve SEO avantajları gibi bir dizi fayda sağlar. Bu nedenlerle, özellikle web siteleri ve internet tabanlı uygulamalar için SSL/TLS kullanımı yaygın ve önemlidir.

Temel Kavramlar:

  • Sertifikalar Nedir? SSL/TLS sertifikaları, sunucunun kimlik bilgilerini doğrulayan ve güvenli bir bağlantı sağlayan dijital belgelerdir.
  • Genel Anahtar Altyapısı (PKI): Sertifikalar ve anahtarlar, bir PKI yapılanması içerisinde çalışır. PKI, sertifika otoriteleri (CA’lar) tarafından verilen sertifikaların ve anahtarların güvenilirliğini sağlayan bir sistemdir.
  • Genel Anahtar ve Özel Anahtar Nedir? Genel anahtar, verileri şifrelemek için kullanılırken, özel anahtar, şifrelenmiş verileri çözmek için kullanılır.

SSL ve TLS, şifreleme ve kimlik doğrulama mekanizmaları kullanarak çalışır. İşleyişi anlatmak gerekirse;

El Sıkışma (Handshake):

SSL/TLS bağlantısının kurulması, handshake işlemi ile başlar. Bu işlem, istemci ve sunucu arasında güvenli bir bağlantı kurmak için gerekli olan parametrelerin değiştirildiği bir süreçtir. handshake işlemi aşağıdaki adımlardan oluşur:

  1. İstemci (genellikle web tarayıcısı) sunucuya bağlanır ve SSL/TLS bağlantısını başlatır.
  2. Sunucu, dijital sertifikasını (public key) istemciye gönderir. Bu sertifika, sunucunun kimliğini doğrulamak ve güvenilir bir sertifika otoritesine ait olduğunu belgelemek için kullanılır.
  3. İstemci, sunucunun sertifikasını doğrular. Eğer sertifika geçerli ve doğrulanmışsa, istemci sunucunun kimliğine güvenebilir ve iletişimi devam ettirir.
  4. İstemci, sunucuya göndermek için bir oturum anahtarı oluşturur ve sunucunun açık anahtarı ile şifreler. Bu şifrelenmiş veri, sunucu tarafından özel anahtar ile çözülebilir.
  5. Sunucu, istemciden aldığı şifrelenmiş oturum anahtarını çözer ve kendi oturum anahtarını oluşturur.

Veri Şifreleme ve İletimi:

Handshake işlemi tamamlandıktan sonra, istemci ve sunucu artık bir simetrik anahtarı (oturum anahtarı) kullanarak verileri şifreleyip çözebilirler. Simetrik anahtar, hem verileri şifrelemek hem de şifrelenmiş verileri çözmek için aynı anahtarın kullanılmasıdır, bu nedenle “simetrik” olarak adlandırılır. Bu aşamada, tüm veriler şifrelenir ve güvenli bir şekilde iletilir.

Veri Bütünlüğü Kontrolü:

SSL/TLS, veri bütünlüğünü sağlamak için hash algoritmalarını kullanır. Gönderen tarafından hesaplanan bir hash değeri, alıcı tarafından alınan verilerin bütünlüğünü doğrulamak için kullanılır. Eğer veriler transfer sırasında değiştirildiyse, alıcı tarafından hesaplanan hash değeri gönderilen hash değeriyle uyuşmayacaktır, bu durumda veriler güvenilmez kabul edilir ve iletişim kesilir.

Bağlantının Sonlandırılması:

İstemci ve sunucu, işlemleri tamamladıktan sonra bağlantıyı sonlandırabilirler. Güvenli iletişim tamamlandığında, istemci ve sunucu tekrar handshake işlemi gerçekleştirirler, bu sefer bir bağlantı sonlandırma (close) handshake işlemi yaparlar. Bu işlemle, bağlantı güvenli bir şekilde sonlandırılır ve iletişim tamamlanır.

Bir web sunucusu olan Nginx’i kullanarak SSL/TLS sertifikası ile güvenli bir bağlantı örneği yapalım.

Eğer yüklü değilse aşağıdaki komutlar ile OpenSSL ve Nginx’i kurabilirsiniz.

yum install nginx

yum install openssl

Şimdi, kendinden imzalı bir SSL/TLS sertifikası oluşturacağız.

# Özel anahtar (private key) oluşturma (2048 bit RSA anahtarı)
openssl genpkey -algorithm RSA -out server.key

# Dijital sertifika (public key) isteği oluşturma
openssl req -new -key server.key -out server.csr

# Dijital sertifikayı kendiniz imzalama (self-signed certificate)
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Bu komutlar, server.key adında bir özel anahtar ve server.crt adında bir dijital sertifika dosyası oluşturacaktır. Burada, sizden bazı bilgileri girmeniz istenecektir. Bu bilgiler, SSL/TLS sertifikasının içeriğini belirler. Örneğin, ülke kodu, şehir, organizasyon adı, genel alan adı vb.

Sonrasında oluşturduğunuz server.crt ve server.key dosyalarını Nginx yapılandırma dizinine taşıyın.

mv server.crt /etc/nginx/certs/
mv server.key /etc/nginx/private/

Nginx yapılandırma dosyasını açarak aşağıdaki düzenlemeleri yapın.

vim /etc/nginx/nginx.conf

http {
# … Diğer yapılandırma ayarları …

server {
listen 443 ssl;
server_name example.com;

# SSL/TLS Ayarları
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/private/server.key;

location / {
root /usr/share/nginx/html;
index index.html;
}
}

# HTTP 80 portu yönlendirmesi
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
}

example.com kısmını, kendi domain adınızla değiştirin ve yapılandırmayı kontrol edin ve hata yoksa Nginx servisini yeniden başlatın.

nginx -t
systemctl restart nginx

Nginx’in çalışma durumunu doğrudan systemctl komutuyla kontrol edebilir ve aşağıdaki komutla web sunucusuna gelen istekleri ve yanıtları görebilirsiniz.

systemctl status nginx

tail -n 100 /var/log/nginx/access.log

Bir yanıt yazın