ssl-tls-icerik

1  TLS

TLS (Transport Layer Security – Aktarım Katmanı Güvenliği) internet üzerinden verilerin aktarılması sırasında şifrelenmesini sağlayan bir protokoldür (TLS, SSL protokolünün devamıdır. SSL’in yeni sürümleri TLS olarak isimlendirilmiştir). Ağ üzerinde, veri iletişimi sırasında, bilgilerin şifrelenerek gönderilip alınmasını sağlar. TLS kullanılmadan yapılan iletişimde, her türlü verinin transferi şifrelenmeden, çıplak bir şekilde gönderilip alınır. Böyle bir durumda eğer ağınız dinleniyorsa (bir sniffer aracılığıyla) yetkisiz kişiler önemli verilerinize erişebilir. Bu belge de TLS protokolünün nasıl çalıştığından bahsederken, TLS’i nasıl kullanacağımıza da yer vereceğiz.

1.1  Gizli Anahtar / Açık Anahtar

Bu anahtarlar bir çift halinde var olur ve birlikte çalışırlar. Açık Anahtar (Public Key) kullanılarak şifrelenmiş bir veri yalnızca Gizli Anahtar (Private Key) kullanılarak çözülebilir. Açık anahtarınızı tüm dünyaya duyururken, gizli anahtarınızı tüm dünyadan gizlersiniz. Böylelikle biri size özel bir veri gönderirken, veriyi sizin açık anahtarınızla şifrelediğinde, gizli anahtara sahip olan yalnızca siz bu veriyi çözebilirsiniz.

Veri -> [Açık Anahtar]
-> Şifrelenmiş Veri -> [Gizli Anahtar] -> Veri

Aslında bu anahtar çifti ters şekilde de çalışır. Yani eğer gizli anahtarı kullanarak bir veriyi şifrelerseniz, bunu yalnızca açık anahtarınız çözebilir. Bu sayede, karşıdaki kişi bu verinin gerçekten sizden geldiğini anlayabilir (Gizli anahtarınızı sizden başka hiç kimsenin bilmediğini hatırlayın).

Veri ->
[Gizli Anahtar] -> Şifrelenmiş Veri -> [Açık Anahtar] -> Veri

1.2  Simetrik Anahtar

Bir simetrik anahtarla şifrelenen veri, yine aynı simetrik anahtar ile çözülür. Bu yüzden simetrik anahtar başka bir kişiye ulaştırılmak isteniyorsa, o kişinin açık anahtarı ile şifrelenmelidir ki, simetrik anahtar başkaları tarafından öğrenilemesin.

1.3  Sertifika

Bir sertifika kim olduğunuz hakkında bilgiler içeren bir belgedir ve içerdiği bilgiler; sertifika sahibinin ismi, e-posta adresi, sertifikanın kullanım şekli, ne kadar süre ile geçerli olacağı, web site adı, bu sertifikayı imzalayanın kim olduğu, açık anahtar gibi bilgilerdir (Örneğin HTTP sunucunuzun kullanacağı bir sertifika yaratıyorsanız, bu sertifika HTTP kullanıcınızla ilgili bilgiler içerecek). Kim olduğunuz hakkında bilgiler içeren bu sertifika TLS bağlantısı sırasında, karşı tarafa kim olduğunuzu tanıtmak için gönderilir.

1.4  Sertifika Yetkilisi (Certificate Authority)

Sertifika imzalayan kuruluşlara denir (Örneğin Verisign bir CA’dır). Verisign gibi CA’lar imzalanan sertifikalar istemciler tarafından varsayılan olarak güvenilir kabul edilir. Eğer bir CA’ya sertifikanızı imzalatmak için para ödemek istemiyorsanız, kendi kendinizin CA’sı da olabilirsiniz. Bunun için ilk önce CA’nız için bir sertifika yaratmalısınız. Ve bu sertifika kendinden imzalı bir sertifika olmalıdır.

1.5  Kendinden İmzalı Sertifika

Karşı tarafın, sizin tarafınızdan gönderilen sertifikaya güvenebilmesi için (daha doğrusu karşı tarafın, bu sertifikanın sizden geldiğine emin olabilmesi için) sertifikanız güvenilir kök sertifika yetkilileri tarafından imzalanmış olmalıdır. Eğer bir sertifikayı geçici olarak ya da test amaçlı kullanacaksanız, bu sertifikayı güvenilir kök sertifika yetkilileri tarafından imzalanması yerine, kendi gizli anahtarınızla bu sertifikayı imzalayabilirsiniz. Bu şekilde kendi gizli anahtarı kullanılarak imzalanmış sertifikalara Kendinden İmzalı Sertifika (Self-Signed Certificate) denir.

1.6  Nasıl Çalışır?

Şimdi TLS’in nasıl çalıştığını, HTTP sunucusu ve tarayıcı arasında geçen bir örnek ile açıklayalım.

  1. Tarayıcı, HTTP sunucusuna güvenli bir bağlantı başlatması için istekte bulunur (Adres satırına https:// yazmanız ile gerçekleşir).
  2. HTTP sunucusu isteğe karşılık kendi sertifikasını gönderir (Bu sertifika içerisinde HTTP sunucusunun açık anahtarı olduğunu hatırlayın).
  3. Tarayıcı, gelen sertifika içerisinde bulunan imzaya bakarak, bu sertifikanın güvenilir CA’lar tarafından imzalanıp imzalanmadığını, sertifikanın geçerlilik süresini ve sertifikanın gerçekten istekte bulunulan sitenin sertifikası olup olmadığını kontrol eder. Eğer güvenilir CA’lar tarafından imzalanmış ise sertifika kabul edilir ve sonraki aşamaya geçilir. Eğer tarayıcı sertifikayı imzalayanın kim olduğunu bilmiyor ise, kullanıcıya sertifikayı gösterip kabul etme konusundaki tercihi kullanıcıya bırakır. Kabul edilmemesi durumunda bağlantı burada sona erer.
  4. Tarayıcı, rasgele bir simetrik anahtar yaratır ve sertifikanın içerisindeki açık anahtarı kullanarak bu simetrik anahtarı şifreleyip HTTP sunucusuna gönderir. HTTP sunucusuna gelen bu şifreli veri, ağ trafiği dinlense bile, gizli anahtar sadece HTTP sunucusu tarafından bilindiği için, simetrik anahtarın kötü niyetli kişilerin eline geçmesi mümkün değildir.
  5. HTTP şifrelenmiş simetrik anahtarı, gizli anahtarını kullanarak çözer.
  6. Bundan sonra HTTP sunucusu ve tarayıcı arasındaki gidip gelen bütün veriler, bu simetrik anahtar kullanılarak şifrelenir.

1.7  Gizli Anahtar oluşturma

Şimdi ilk olarak gizli anahtarımızı oluşturalım:

# openssl genrsa -des3 -out
private.key 1024 

Bu gizli anahtarımız oluşturulurken bizden bir passphrase (password ile aynı anlama gelir. Eski UNIX’lerde password 8 karakterle sınırlı iken passphrase daha uzun password anlamında kullanılırdı.) girmemiz istenecek (Çünkü yaratılacak olan bu gizli anahtar bilgisayarımıza kaydedilirken Triple DES algoritması ile şifrelenip kaydedilecek. Böylece bu dosyamız başka birinin eline geçse bile gizli anahtarı kullanabilmesi için, passphrase i bilmesi gerekir).

1.8  Sertifika İmzalama İsteği

Şimdi gizli anahtarımızı kullanarak, imzalanmak üzere oluşturulacak Sertifika İmzalama İsteği (Certificate Signing Request – CSR) oluşturalım:

# openssl req -new -key
server.key -out server.csr 

CSR oluşturulurken openssl uygulaması sizinle ilgili bir takım sorular soracak. Bu sorulardan bizim için en önemli olanı ftp adresini (örneğin ftp.magmalinux.org gibi) girdiğimiz Common Name sorusudur. Eğer bu sertifikayı bir HTTP sunucusu için yaratıyorsanız web adresinizi (www.magmalinux.org gibi) Common Name değeri olarak belirleyin.

CSR’nin bulunduğu dosya olan server.csr’yi VeriSign, GlobalSign gibi CA firmalarına belli bir ücret karşılığında imzalattırmamız gerekiyor. server.csr dosyamızı seçtiğimiz bir CA’ya gönderdikten sonra, bize gönderdikleri sertifika dosyasını (genellikle .crt uzantılı olur ama uzantının pek bir önemi yok). Bir diğer seçeneğimiz ise, kendi kendimizin CA’sı olmak ve kendi CSR’lerimizi kendimiz imzalamaktır.

1.9  Kendi Kendinizin Sertifika Yetkilisi (CA) Olmak

Bu bölümde kendi CA’mızı oluşturup, kendi sertifikalarımızı kendimiz imzalayacağız. Eğer CA firmalarına imzallattığınız bir sertifikanız varsa bu bölümü atlayabilirsiniz.

İlk olarak CA’mız için bir gizli anahtar oluşturalım:

# openssl genrsa
-des3 -out ca.key 1024 

Bu aşamada bize ca.key dosyamız için bir passphrase sorulacak. Bu passphrase sayesinde, oluşturulacak bu gizli anahtar şifrelenmiş bir şekilde diskimize kaydedilecek.

Sırada CA’mız için kendinden imzalı bir sertifikaya ihtiyacımız var (Dikkat edin, bu sefer bir Sertifika İmzalama İsteği yerine kendi CA sertifikamızı CA’mızın gizli anahtarı ile imzalıyoruz). Aşağıdaki komut ile kendinden imzalı 365 gün boyunca geçerli bir sertifika oluşturuyoruz.

#
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Artık kendi CA’mızın gizli anahtarı ve sertifikası hazır. Şimdi bunları kullanarak bir önceki bölümde oluşturduğumuz Sertifika İmzalama İsteği’ni (server.csr dosyasını) imzalayalım (komutun ilk satırının sonundaki \ işareti komutun bir alt satırdan devam ettiğini belirtir):

# openssl x509 -req
-in server.csr -out server.crt -sha1 -CA ca.crt \ -CAkey ca.key
-CAcreateserial -days 365