16 Ocak 2012 Pazartesi

Kendi Sertifika Otoritemizi Nasıl Yaratırız?

    Merhabalar,
  Sertifika sahibi olma konusunda birden fazla yöntem mevcut. Bunlardan bir tanesi güvenilir sertifika otoritelerine başvurmak ve bir ücret karşılığı sertifika edinmek, diğeri de OpenSSL komutları sayesinde kendi sertifika otoritemizi yaratıp, bu otorite ile sertifikalar imzalayıp kullanmaktır. Bir web sayfası ile bağlantıya geçildiğinde browser karşı tarafın sertifikasını indirir ve bu şekilde etkileşimi başlatır. Ancak self-signed sertifikaları kullandığımızda, günümüz browserları bunları güvenli olarak görmez ve hata verir. Size bu sertifikaya güvenip güvenmediğinizi sorar ve eğer siz olumlu yanıt verirseniz bu sertifika bilgisayarınıza indirilir ve güvenli olarak işaretlenir. Yani güvenilir sertifika otoriteleri dışında üretilmiş sertifikalar için bu şekilde bir güvenlik adımı vardır. Bu her mesaj kutusuna okumadan evet deyip geçmeyen dikkatli kullanıcılar için işe yarayabilir. Çünkü gerçek olmayan bir tarafın o olduğunu kabul etmiş olma riskiniz vardır. Kimliğinin doğru olduğuna emin olunduğunda izin vermek daha mantıklıdır.

   Kendi sertifika otoritemizi yaratırken, imzalama yaparken openssl komutlarından faydalanabiliriz. Bu sertifikalar kişisel kullanım için, intranette login olma, servislerle iletişim aşamasında güvenli ve iyi bir yol sağlar. Çünkü veriler ya da parolalar açık şekilde taşınmaz. Ama yine de güvenilir sertifikalardan değildirler.

Öncelikle bilgisayarınızda openssl paketi kurulu olmalı. Bende kurulu versiyonu;
OpenSSL 1.0.0d 8 Feb 2011 (1.0.0e versiyonu da duyurulmuş)

İlk yapılacaklardan biri yeni bir dizin oluşturmak bunu komut olarak yazıyorum. Bu aşamadan sonra sertifika üretimi aşamalarına geçeceğiz.

# mkdir sertifikalar

# cd sertifikalar

# mkdir certs private crl newcerts

sertifikalar : Bizim sertifika otoritesi dizinimiz
certs: Server sertifikamızın konumlandığı yer
private: Gizli anahtarımızın tutulduğu alt dizindir. Bu dizinin sadece root tarafından okunabilir şekilde izinlerini sınırlandırmak gereklidir. Bir sunucuyla bağlantı kurmadan önce
newcerts: openssl yarattılan .pem formatlı dosyayı buraya koyar ve biçimi cert_serial_number.pem şeklindedir. Bizim sertifika yaratabilmemiz için openssl bu dizine ihtiyaç duyar.
Crl: İptal edilmiş sertifikaların listesi 

Şimdi sırada varsayılan openssl konfigürasyon dosyasını kendi sertifikalar dizinimize kopyalama var. Varsayılan openssl.cnf dosyasının bulunduğu dizine girip:

# cp /etc/pki/tls/openssl.cnf ./openssl.my.cnf

Bu dosyanın herkes tarafından okunmasına gerek yok ancak biz değişiklik yapabilmeliyiz.

# chmod 0600 ./openssl.my.cnf

İki dosyaya daha ihtiyacımız var bunlardan biri openssl için database hizmeti verecek:

# touch index.txt

Diğer dosya sertifikaların seri numaralarını tutacak hiç sertifika üretmeyene kadar 01 değerini veriyoruz.

# echo '01' > serial
Birazdan sertifika üretme aşamalarında karşımıza çıkacak dosya uzantılarının anlamlarından da bahsetmek istiyorum:

key : private key
csr : certificate request(Bu sunucu sertifikaları oluşturmak için CA tarafından imzalanmış olacak.)
crt : certificate ( Bu genel ve açık bir şekilde dağıtılabilir)
pem : gizli anahtar ve sunucu sertifikası bir arada olan dosyalar için kullanılan bir uzantıdır. Bu dosyaların izinleri sınırlandırılmalıdır.
crl : Certificate Revokation List (Dağıtımı açıkça olabilir)

Bütün ön düzenlemeler bittikten sonra sertifika otoritemizi (CA) kullanarak
self-signed sertifikamızı oluşturabiliriz.

# cd sertifikalar

Sertifika otoritesi ve özel anahtar üretimi:

# openssl -req -config openssl.my.cnf -new -x509 -extensions v3_ca -keyout private/myca.key -out certs/myca.crt -days 1825

certs/myca.crt: Bu bizim sertifika otoritemizin sertifikası, public, herkes tarafından okunabilir.
private/myca.key: Sertifika otoritemizin private key i. Erişimi sınırlandırılmalı, root sadece okuyabilmeli ve bir parola ile korunmalı.

# chmod 0400 ./private/myca.key

Varsayılan olarak aldığımız openssl.cnf dosyasına bazı dosyalarımızın yolunu göstermemiz ve ayarlamalar yapmamız gereklidir. Bu dizinler:
  • dir dizini
  • certificate
  • private_key

Şimdi de bir server sertifikası nasıl oluşturulur buna bakalım:
openssl.my.cnf dosyamızı da düzenledikten sonra artık sertifika yaratma, imzalama gibi konularda bazı politikaları belirlemiş oluyoruz. Genel amaçlı bir sertifika oluşturacağız, bağlantı sırasında parola sordurmayacağız, yani private key bir parola tarafından korunmayacak dosya erişimini sınırlayacağız.

Sertifika İsteği Üretmek :

# openssl req -config openssl.my.cnf -new -nodes -keyout private/server.key -out server.csr -days 365

-nodes seçeneği parolalı koruma yapılmak istenmediğinde ihtiyaç duyulan bir seçenektir.

server.csr : sertifika isteği
private/server.key : parola korumalı olmayan özel anahtar

Gizli anahtarda izin sınırlamaları. Sadece root ya da kullanıcı okuma iznine sahip olmalı.

# chown root.root ./private/server.key
# chmod 0400 ./private/server.key

Sertifika İsteğini İmzalamak:

# openssl ca -config openssl.my.cnf -policy policy_anything -out certs/server.crt -infiles server.csr

Burada isteğin imzalanması için CA'nın private key ine ihtiyaç duyulur. Openssl.my.cnf dosyasında policy_anything kısmında Country, State, City alanlarının CA sertifikasıyla eşleşme gerekliliği yoktur.

Certs/server.crt : server sertifikası public olması uygundur
newcerts/01.pem : Bu kesinlikle üstteki dosyanın aynısıdır, fakat dosya adı seri numarasıyladır ve ihtiyaç duyulmaz.

Sertifikaları doğrulamak:

# openssl x509 -subject -issuer -enddate -noout -in ./certs/server.crt

ya da

# openssl x509 -in ./certs/server.crt -noout -text

Server yetkilendirme için sertifika gecerliliğinin doğrulanması:

# openssl verify -purpose sslserver -CAfile ./certs/myca.crt ./certs/server.crt

Server Sertifikası ve anahtarı bir dosyada :

# cat certs/server.crt private/server.key > private/server-key-cert.pem

# chown root.root private/server-key-cert.pem
# chmod 0400 private/server-key-cert.pem

Yararlandığım sayfalar:

Hiç yorum yok:

Yorum Gönder