SSL Sertifikası Nasıl Üretilir?

SSL sertifikasının iki farklı türü bulunuyor; bunlar otorite imzalı SSL sertifikaları ve kendini imzalamış (self signed) SSL sertifikaları.

Kendini imzalamış sertifikalar genellikle test amaçlı veya lokal kullanımda tercih ediliyor. Biri diğerine göre daha güvenli değil. Otoriterler güvenli anahtar değiş tokuşuna olanak sağlarlar ve paylaşılan açık anahtarların doğruluğunu kanıtlarlar.

https sslSSL, anahtar değişiminde asimetrik algoritmalar (RSA,DSA), akan trafikte simetrik algoritmalar (AES, 3DES, RC4 …) kullanılır. Asimetrik kriptografi yaygın olarak açık anahtar (public key, PKI) kriptografisi olarak da anılmaktadır. Açık anahtar kriptografisinde açık (public) ve gizli (private) olmak üzere iki anahtar oluşturulur. Açık anahtar ile kriptolanan veri ancak anahtar çiftinin gizli olan yarısı ile çözülebilir. Bunun tam tersi; gizli anahtar ile kriptolanan veri anahtar çiftinin açık olan yarısı ile çözümlenebilir, bu kaynağın doğrulanması için kullanılır (sertifika doğrulama).

SSL açık anahtar ile şifrelenmiş veriyi İnternet’e gönderiyorsa, neden sertifikaya ihtiyaç duyuluyor? Sertifikalar, güvenilir sertifika otoriteleri tarafından imzalanmış açık anahtarlardır ve sertifikayı gönderen tarafın gerçekten o kişi olduğunu doğrularlar. Güvenilir otorite tarafından imzalanmayan sertifikalar kullanıldığında da veri kriptolanır fakat iletişim kurulan tarafın doğru kişi olduğu kanıtlanamaz.

1- Özel Anahtarın Oluşturulması

SSL özel anahtar oluştururken seçebileceğimiz iki farklı algoritma var, DSA ve RSA. Algoritma seçimi yaparken pek çok farklı kriter göz önünde bulundurulur. Seçimi siyasi veya teknik detaylar belirleyebilir. Örnek olarak yaygın kullanılan RSA‘yı seçiyoruz;

openssl genrsa -out sunucu.pem 2048

Oluşturulan dosya PEM biçimindedir ve ASCII olarak okunabilir.

2- Sertifika İmza Talebinin Oluşturulması CSR (Certificate Signing Request)

CSR üretilirken, özel anahtar kullanılarak açık anahtar oluşturulur ve  imzalanır. Bu CSR dosyası sertifika otoritesine gönderilerek imzalanması istenir. İşlemden sonra otorite imzalı açık anahtarı sertifika olarak geri döner. Bu süreçte gizli anahtarın karşı tarafa gönderilmesine gerek yoktur.

CSR dosyasını sertifika otoritesine göndermek yerine kendi özel anahtarımız ile imzalayabiliriz. Bu tip sertifikalara, kendi imzalamış sertifika (self signed certificate) denir.

CSR dosyası oluşturulurken, sertifika üzerinde X.509 alanlarının tanımlanması istenecek. Bu alanlardan en önemlisi “Common Name” alanıdır. Bu alana SSL ile korumak istediğiniz alanadını yazmanız gerekiyor (fully qualified domain name).

openssl req -new -key sunucu.pem -out sunucu.csr

Country Name (2 letter code) [GB]:TR
State or Province Name (full name) [Berkshire]:Cankaya
Locality Name (eg, city) [Newbury]:Ankara
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:ozcan.com
Email Address []:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

3- Kendini İmzalamış Sertifika (self-signed certificate)

Oluşturacağınız sertifikayı bir otoriteye imzalatmayacaksanız, kendi özel anahtarınız ile CSR dosyasının imzalanması gerekiyor. Self-signed sertifika kullandığınızda tarayıcınız uyarı görüntüleyecektir. Bu uyarının sadece kendi sisteminizde görüntülenmesini önlemek için, sertifikayı tarayıcınızın güvenilir kök sertifikalar (trusted root certification authorities) bölümüne eklemeniz yeterli.

openssl x509 -req -days 365 -in sunucu.csr -signkey sunucu.pem -out sunucu.crt

4- Özel Anahtarın Güvenlik Parolasının Kaldırılması

Özel anahtar oluşturulurken tanımlanmış bir parola var ise bunun kaldırılması, web servisleri yeniden başlatıldığında kolaylık sağlayacaktır. Ek güvenlik gereken durumlarda bu parola tanımlanır ve web servislerinin her açılışında parolanın girilmesi gerekir. Parolayı kaldırdıktan sonra özel anahtara sadece root kullanıcısının erişebilir olması güvenliği açısından önemlidir.

openssl rsa -in server.key.org -out server.key

5- Sertifikanın Web Sunucuya Eklenmesi

Aşağıda Apache web sunucu için örnek ayar satırları bulunuyor;

SSLEngine on
SSLCertificateFile /usr/local/apache/conf/sunucu.crt
SSLCertificateKeyFile /usr/local/apache/conf/sunucu.pem
SSLCACertificateFile /usr/local/apache/conf/sub.class1.server.ca.pem

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !$

CipherSuite ile trafik kripto algoritma önceliği belirlenir. Anahtar derinliği arttıkça performans düşecektir.

Hamdi ÖZCAN – ozcan.com



Yorumlar

  1. Bu konuya her eğildiğimde (bir daha gerekmeyecekmiş gibi) adımları İngilizceden Türkçeye çevirirdim. Bence herkes için çok kullanışlı bir yazı olmuş. Ellerinize sağlık…

  2. Çok faydalı bir kaynak, teşekkürler.

    Ayrıca karşılaştığım hatayla ilgili kısa bir not eklemek isterim. Eğer “Invalid command ‘SSLEngine’…” benzeri bir hata alınırsa Apache için SSL modülünün ‘enabled’ edilmesi gerekmekte. Debian tabanlı sistemler için komut satırında şu komutu çalıştırmalısınız:

    sudo a2enmod ssl

halil kahraman için bir yanıt yazın Yanıtı iptal et

(gerekli)