spacer.png, 0 kB
Bilgi için: bilgi at bilgiguvenligi gov tr   

 

spacer.png, 0 kB
spacer.png, 0 kB
Sertifika - Sertifika Oluşturma - Sertifika Türleri Yazdır E-posta
Esma Güneyeri, Şekerbank   
14.04.2012

SSL Nedir?

SSL, İnternet üzerinden yapılan bilgi alışverişi sırasında güvenlik ve gizliliğin sağlanması amacıyla geliştirilmiş bir protokoldür. Bu protokol ile, İnternet gibi güvensiz ve saldırılara açık bir ortam üzerinde güvenli bir şekilde iletişim sağlanır. SSL protokolü ile veri karşı tarafa gönderilmeden önce belirli bir şifreleme algoritması ile şifrelenir ve sadece doğru alıcı tarafından bu şifre çözülerek asıl veri elde edilir.

Sifreleme Algoritmalari

Simetrik Şifreleme Algoritması: Veriyi şifrelemek ve şifreli veriyi çözmek için her iki tarafında bildiği ortak-tek bir anahtar kullanılır.

Asimetrik Sifreleme Algoritmasi: Veriyi şifrelemek ve şifreli veriyi çözmek için 2 farklı anahtar kullanılmaktadır. Bunlar public key (açik anahtar) ve private key (gizli-kapali anahtar)’lerdir. Asimetrik şifreleme algoritmalarında veriyi alan taraf sadece kendisinin bildiği bir private key ve diğer kişiler – kurumlarca bilinebilen bir public key oluşturur. Gönderen veriyi, alıcının public key’i ile şifreler. Alıcıya ulaşan şifreli veri, alıcının private key’i kullanılarak çözülür. Private key bilinmediği sürece şifrelenmiş verinin hiçbir değeri yoktur. Çünkü belirli bir kişinin-kurumun public key’i ile şifrelenmiş veri sadece o kişinin-kurumun private key’i ile çözülebilir.

Sayısal İmza Nedir?

Sayısal imza en basit tanımıyla göndericiye ait olan bir damgadır. Sayısal imzalar bize gelen verinin gerçekten beklediğimiz gönderici tarafindan gönderildiğini ve bu gönderim sırasında verinin herhangi bir değişikliğe uğramadığını bütünlüğünü kaybetmediğini teyit eder. Gönderilen verinin bütünlüğünü ve gönderen tarafin kimliğini doğrular.

Sayısal imzada asimetrik şifreleme algoritmalari kullanılır; gönderilen mesajı imzalamak için private key kullanılırken, imzayı doğrulamak için public key kullanılır.

Sayısal imza oluşturma süreci şu şekildedir:

Gönderilen verinin hash değeri alınır. Bu işlem kısaca gönderilen verinin bir hash algoritması ile işlenip sabit uzunlukta bir veri elde edilmesi işlemidir. Hash değerini alınan mesajı, mesaj-ileti  özeti olarak isimlendirebiliriz.  Daha sonra bu mesaj özeti göndericinin private key'i ile şifrelenir. Böylece veri dijital olarak imzalanmış olur.

En basit tanımıyla sayısal imza, kişinin veya  kurumun public key'inin hash değerinin alınması ve bu değerin bir sertifika otoritesinin private key’i ile imzalanmasıdır. Böylece  kurumun gerçekliği kimliği geçerli bir sertifika otoritesi tarafından doğrulanmış olur.

Sertifika Nedir?

Alıcı,  göndericinin doğruluğunu sayısal imza ile kontrol eder. Peki gönderici, gönderdiği verinin gerçekten beklediği doğru kişiye veya kuruma ulaştığından nasıl emin olur? Public key’ini kullanarak verileri şifrelediğimiz kişi yada kurum gerçek kişi yada kurum mu? Erişmeye çalıştığımız web sitesi gerçekten bizim erişmek istediğimiz web sitesi mi? Tüm bu soruların cevabını ararken karşımıza “Sertifika” olgusu çıkar.

Sertifika ile bir web sitesi kendisini, kendisine erişmek isteyen kullanıcıya tanıtır. Sertifika, kurumun public key’i ve bu public key’inin hash değerinin sertifika otoritesinin private key’i ile imzalanmasından oluşur.

Sertifika = (Private KeyCA (Hash(Public Keykurum))) + Public Key = Sayisal Imza + Public Key

*CA : Certification Authority – sertifika otoritesi , Sertifika vermeye yetkisi olan kurum.(Örn: Globalsign, Verisign)

Sertifika Islemleri

Bir web sayfasında kullanılmak üzere bir sertifika satın almaya ihtiyacımız varsa, nasıl ilerlememiz gerekmekte? Genel olarak anlatmak gerekirse, öncelikle elimizde bir private key ve bu private key ile oluşturulmuş csr dosyası olmalıdır.  Bu csr dosyası sertifika otoritesine gönderilir. Doğrulama işlemleri gerçekleştirildikten sonra Sertifika Otoritesi tarafında bize sertifika dosyası (cer) gönderilmiş olur.  Peki private key nasıl oluşturulur? .csr, cer  nedir? . csr, cer nasıl oluşturulur?

Tüm bu soruların cevaplarını ararken OpenSSL uygulamasından yararlanılacaktır.

OPENSSL

Key ve sertifika oluşturmak için öncelikle bir sertifika sunucusuna ihtiyacımız var. Bu aşamada İnternetten kolaylıkla bulabileceğimiz ve windows ortamında da çalışabilen Openssl kullanılacaktır. Openssl’i kurduktan sonra komut satırından programın kurulu olduğu dizine gidip gerekli komutları openssl/bin dizini altında gerçeklenecek.

Asağıdaki linkten Windows 32 bit ve 64 bit ile uyumlu çalisan openssl paketi indirilebilir.

http://www.slproweb.com/products/Win32OpenSSL.html

Openssl ilk çalıştırıldında aşağıdaki hata ile karşılaşılabilir.

Warning: can’t open config file: C:\Openssl \bin\openssl.cfg

Hatadan da anlaşılacağı gibi program openssl.cfg dosyasını bulamadığı için hata alıyor ve çalışmıyor. Asağıdaki komut satırını çalıştırılarak sorun çözülmüş olur ve openssl sorunsuz çalışır.

set OPENSSL_CONF=c:\[OPENSSL DIZININI yaziniz]\bin\openssl.cfg

Private Key Olusturma

Öncelikle sertifika kullanılacak sunucu üzerinde bir private key oluşturulmalıdır. Bu private key csr oluşumunda da kullanılacaktır. Bu aşamada Openssl sertifika sunucusu kullanılacaktır.

OpenSSL kullanarak  2048 bit bir private key oluşturmak için aşağıdaki komutları girmek yeterlidir.

openssl genrsa -out privatekey.key 2048

resim-1.png

openssl genrsa -des3 -out privatekey1.key 2048

resim-2.png

\openssl\bin dizini altında oluşturulan private key’ler görülebilir. İlk çalıştırılan komut ile ikinci çalıştırılan komut arasındaki fark ne peki? Tek fark ikinci çalıştırılan komutun, şifre istiyor olması. Bu private key’i kullanarak CSR oluştururken bu aşamada oluşturulan şifre sorulacak. Şifrenin doğru girilmesi durumunda csr oluşumu gerçekleşecek.  Bu şifre private key’i koruyacağı için, bu şifre tahmin edilmesi zor ve güçlü bir şifre olmalıdır.

Csr Oluşturma

SSL sertifika talebinin ilk adımı Sertifika İmza Talebinin (Certificate Signing Request) oluşturulmasıdır.  

CSR dosyası aşağıdaki bilgileri kapsar:

  • Sertifikayı talep eden kurum bilgisi

  • Sertifikanın kullanılacağı adres (Common Name)

  • Public Key

Bu bilgilerin CA’in private key ile imzalanması sonucu CSR elde edilmiş olur.

CSR’nin üretilme şekli, sunucu tarafında kullanılan web server yazılımına göre değişmektedir.

Apache Web Server üzerinde csr olusturma

Php diliyle yazilmiş web uygulamalarını görüntüleyebilmek için apache web server’a ihtiyaç duyulur. Bu yapıdaki sistemlerde openssl ile csr oluşturulabilir.

“openssl genrsa -des3 -out www.test.com.key 2048” komutu ile www.test.com.key dosyası içerisine private key kaydedilmiş olur. Şimdi bu private key’i kullanarak csr oluşturulabilir.

openssl req -new -key www.test.com.key -out www.test.com.csr

resim-3.png

Bu komut çalıştırıldığı zaman sertifikayı talep eden kuruma ait bilgiler sorulacaktır. Bu bilgilerin doğruluğu önemlidir. Çünkü bu bilgiler daha sonra sertifka otoritesi tarafından kontrol edilcektir. Ayrıca Common Name kısmına dikkat etdilmesi gerekir.  Bu kısma SSL sertifikası alınan web sunucusunun adresi başında http-https olmadan girilmedir.

Geçerli bir sertifika otoritesine gönderilmek üzere csr dosyası hazırlanmış oldu. İstenirse aşağıdaki şekilde CSR  imzalanarakta sertifika oluşturulabilir. Fakat unutulmamalıdır ki, bu sertifika herhangi bir sertifika otoritesi tarafindan doğrulanmış değildir. Diğer kullanıcıların tanımadığı CA tarafından imzalanan sertifikalarkullanılırken aşağıdaki gibi hata verir:

resim-4.png

Aşağıdaki örnekte sertifikanın geçerlilik süresi –days komutu ile belirtildiği gibi 365 gündür.

openssl x509 -req -days 365 -in www.test.com.csr -signkey www.test.com.key -out www.test.com.cer

resim-5.png

Oluşturulan sertifikanın içeriği aşağıdaki komut ile kontrol edebilir, hakkında bilgi edinilebilir.

openssl x509 -noout -text -in www.test.com.cer

resim-6.png

Tomcat Web Server üzerinde csr olusturma

Java diliyle yazılmış web uygulamalarının çalışması için Tomcat Web Server gereklidir. Bu tarz sistemlerde client ile sunucu arasında güvenli bir iletişim sağlamak için Truststore ve Keystore dosyaları kullanılmaktadır. Keystore dosyası private key'i kullanarak şifreleme ve imzalama işlemi yaparken truststore dosyaları genellikle doğrulama işlemleri için kullanılır. Keytool komutu kullanılarak public/private key çiftini içeren keystore dosyası oluşturulur; bu oluşturulan keystore dosyası kullanılarak da sadece public key'in tutulduğu truststore dosyası yaratılır.

Sertifikayı oluşturacağımız sunucu üzerinde Java Runtime Environment (JRE) veya Java Development Kit (JDK) kurulu olmalıdır. CSR dosyasını oluşturmadan önce , csr oluşumunda kullanılmak üzere bir keystore olusturulmalıdır. Keystore, anahtar (key) ve sertifika yönetim programı olan Java Keytool ile oluşturulur. Java Keytool programı, kullanıcıların kendi public/private key’lerini ve sertifikalarını yönetmelerine olanak sağlar.

Bir keystore dosyası, public ve private key çiftlerini içeren bir anahtar-key  veritabanıdır.

Java Keystore’da tutulan her bir sertifika tek-benzersiz bir alias ile ilişkilidir. Yani burada tutulan sertifikaların kendine özgü bir takma adı vardır denilebilir.

Bir keystore dosyası yaratılırken öncelikle sadece private key’i içeren  java anahtar deposu dosyası olarak adlandırılan jks uzantılı bir dosya oluşturulur.

Keystore ve Truststore oluşumu üç adımda anlatılabilir.

  • Keystore dosyası içerisinde private key oluşturmak,

  • Sertifikanın export edilmesi,

  • Truststore dosyası içerisine sertifikanın import edilmesi,

Keystore olusturma / Keystore dosyasi içerisinde private key olusturmak

Java keytool ile key'ler ve sertifikalar bir keystore dosyası içinde saklanır. Windows sistemlerde Keytool komutu Java bin dizininde çalıştırılır. Aşağıdaki örnekte E:\Program Files\Java\jre6\bin dizini kullanılmıştır. (Diger örnek dizinler : C:\Program Files\Java\j2re1.4.2_08\bin veya C:\Program Files\Java\jdk1.6.0_12)

keytool -genkey -alias mytest -keyalg RSA -keysize 2048 -keystore www.test.com.jks

resim-7.png

Komut çalıştırıldığında, keystore için  şifre ve Key’de yer alacak bilgiler sorulacaktır, ardından keystore oluşacaktır.  Bu örnekte keystore dosyası, biz belirtmediğimiz için  \java\jre6\bin dizini altında oluşturulmuştur. İstenirse keystore dosyasının oluşacağı dizin için farklı bir konum belirtilebilir. Eğer sertifika yenilemesi yapıyorsak yeni bir anahtar çifti ve keystore dosyası oluşturmamız gerekmektedir. CSR olustururken veya bizim tarafımızdan imzalanmiş keystore’u kullanarak oluşturulmuş bir sertifikayı sisteme yüklerken aynı alias’in kullanılması gerekmektedir. Ayrıca sorulan şifre, CSR oluştururken kullanmak üzere not alınmalıdır.

keytool -list -v -keystore www.test.com.jks

resim-8.png

Bu komut ile oluşturulan keystore dosyası kontrol edebilir, keystore dosyasının içeriği hakkında bilgi edinilebilir.

keytool -certreq -keyalg RSA -alias mytest –file www.test.com.csr -keystore www.test.com.jks

resim-9.png

Bu komut ile CSR dosyası oluşturulmuş oldu.

Sertifika olusturma

Eğer istenirse aşağıdaki şekilde sertifika oluşturulabilir. Fakat unutulmamalıdır ki, bu sertifika herhangi bir sertifika otoritesi tarafından doğrulanmış değildir.

keytool -export -alias mytest -file www.test.com.cer -keystore www.test.com.jks

resim-10.png

Oluşturulan sertifika aşağıdaki şekilde kontrol edilebilir.

keytool -printcert -v -file www.test.com.cer

resim-11.png

Sertifikayı import etme

Truststore dosyası içerisine oluşturulan sertifika aşağıdaki gibi import edilerek işlem tamamlanmış olur.

resim-12.png

Not: İlgili sunucu üzerinde Java Runtime Environment (JRE ) çalışıyor ise,  oluşturulan sertifikayı  E:\Program Files\Java\jre6\lib\security\cacerts  dosyasına ekleyerek sertifikayı truststore eklemiş oluruz.

Tüm bu adımlar sonucunda oluşturulan dosyalar aşağıdaki gibidir.

resim-13.png

Sertifikasyon Süreci

Yukarıda, sertifika sürecinde nasıl private key, csr, keystore , truststore ve sertifika dosyası (.cer/.crt) oluşturulduğundan bahsedildi. Burada oluşturulan sertifkalar (.cer) CA tarafından imzalanmış sertifikalar değillerdi.

Bir web sitesine geçerli bir sertifika otoritesi tarafından imzalanmış bir sertifika almak istedigimizde kısaca aşağıdaki adımlar izlenir:

1) Öncelikle yukarda da anlatıldığı şekilde bir private key ve CSR (Certificate Signing Request) oluşturulması gerekmektedir.  Bu adim sonucunda Sertifika Otoritesine iletilmek üzere bir Csr dosyası ve kimseyle paylaşılmaması gereken kişi veya kuruma özel private key oluşmuş olacaktır. CSR oluşumu kapsamında girilen bilgiler (5.2.  Csr Olusturma) bir Registration Authority (RA)   tarafindan kontrol edileceği için dikkatli ve doğru bir şekilde doldurulmalı, Türkçe karakter kullanılmamalıdır. RA, CA adına işlem yapmaya yetkili yerel kurumdur. (CA’in bayisi olarak düşünülebilir.)

Common Name, sertifikanın kullanılacağı adrestir. (Başında http/https yazılmadan girilmelidir.) Organization  kısmına ise  kurum adı girilmelidir. (Kurum adı WHOIS bilgileri ile aynı olmalıdır.)

2) RA’ya iletmek üzere sorumlu kişi, kurum veya birimin iletişim bilgileri ve fatura, kurum bilgileri gibi bilgilerin yer aldığı bir başvuru formu doldurulması gerekmektedir. Daha sonra oluşturulan Csr ile beraber bu formu aşağıdaki belgelerle RA’ya gönderilir. Böylece sertifika talebi gerçekleşmiş olur.

  • Kurumsal sicil kaydı -  ticari sicil gazetesi fotokopisi,

  • Kurum imza sirkülerinin fotokopisi,

  • Sunucu (SSL) sertifikasının bedelinin ödendiğine dair banka dekontu,

  • Kurumun, sunucuya ait alan adına sahipliğini gösterir belgenin örneği,

Bu  süreç, formlar ve belgeler  RA’lar  arasında işleyiş tarzına göre farklılık gösterebilir.

3) RA kendisine ilettigimiz tüm bilgileri kontrol eder. Bu kontrol, yukardaki bilgilerin dogrulanmasi kadar basvuruyu kurum adina yapan kisinin de gerçekten yetkili olup olmadigini da içerir. Bilgilerin dogrulanmasi sonucunda, RA gerekli bilgileri sertifika otoritesine (CA) gönderir. CA bizim gönderdigimiz public key’in Hash’ ini alip kendi private keyi ile sifreler (Sayisal Imza).   Daha sonra CA, bu public keyi ve bu hashi kullanarak sertifika üreterek taramiza iletir.

Sertifika = (Private KeyCA (Hash(Public Keykurum))) + Public Key = Sayisal Imza + Public Key

4) CA’den iletilen sertifika dosyası doğrudan şifreli trafiğin sonlandığı yere (örn: ilgili sunucu, load balancer, ips…) yüklenebilir. Fakat sertifikanın yükleneceği sunucu tipi veya ek bir güvenlik önlemi sağlamak gibi farklı nedenlerden dolayı gelen sertifika formatını değiştirmek gerekebilir.

5) Dönüştürme, import ve kontrol aşamaları bittikten sonra sertifika sorunsuz çalışıyor ise tüm bu sertifika dosyaları, private keyler ve şifreler bir CD’ye yazılarak güvenli bir depolama ortamında saklanmalıdır.

Sertifika Formatları ve Formatları Birbirine Dönüştürme

PEM Format

En yaygın olarak kullanılan sertifika formatıdır. PEM sertifikasının  .cer , .crt, .pem, .key gibi uzantıları mevcuttur. PEM sertifikası  Base64 ile kodlanmış ASCII dosyasıdır. Apache ve benzeri sunucular PEM formatındaki sertifikaları kullanırlar. PEM sertifikası ve private key aynı  dosya altında bulunabilirler. Fakat apache gibi çoğu platform, sertifikaların ve private key’in farklı dosyalarda bulunmasını beklerler.

Cer uzantılı dosyayı Pem uzantılı dosyaya çevirmek için asağıdaki komut dizileri kullanılabilir.

openssl x509 -in www.test.com.cer -out www.test.com.pem –outform PEM

resim-14.png

Veya

openssl x509 -in www.test.com.cer -out www.tes.der -outform DER

openssl x509 -in www.test.der -inform DER -out www.test.pem -outform PEM

DER  Format

Pem ASCII formatında bir sertifika dosyası iken DER uzantılı sertifika dosyaları binary formatındadır. Bazı zamanlarda bu formattaki sertifikaların uzantısı .der olsa da çoğu zaman .cer uzantısı kullanılır. Cer uzantılı bir sertifikanın DER formatında mı yoksa PEM formatında mı anlamak için sertifikayı notepad benzeri bir editör ile açıp “BEGIN………..END” ifadesini incelemek gerekir. DER formatı genellikle Java platformlarında kullanılır.

Pem uzantılı dosyayı der uzantılı dosyaya çevirmek için asağıdaki komut dizileri kullanılabilir.

openssl x509 -outform der -in www.test.com.pem -out www.test.com.der

resim-15.png

Der uzantılı dosyayı der uzantılı dosyaya çevirmek için asağıdaki komut dizileri kullanılabilir.

openssl x509 -in www.test.com.der -inform DER -out www.test.pem -outform PEM

resim-16.png

P7B  - PKCS#7 Format

P7B formatı genellikle Base64 ASCII formatında saklanır ve .p7b veya .p7c uzantılı sertifika dosyalarıdır. P7B formatındaki sertifikalar “ -----BEGIN PKCS7-----" ve "-----END PKCS7-----“ ifadelerini içerir. P7B uzantılı bir dosya sadece sertifika veya sertifika çiftlerini içerir, private key’i içermez. Microsoft Windows ve Java Tomcat dahil olmak üzere çesitli platformlar P7B formatını desteklerler.

Cer uzantılı dosyayı P7B formatlı bir sertifikaya çevirmek için aşağıdaki komut dizileri kullanılabilir.

openssl.exe crl2pkcs7 -nocrl -certfile www.test.com.cer -out www.test.com.p7b -certfile certificate_authority.cer

resim-17.png

PFX  - PKCS#12 Format

PFX formatı; sunucu sertfikasını, herhangi bir intermediate sertifikayı (sertifika otoritesine ait public key’i içeren sertifika örnek olarak verilebilir) ve private keyi  şifrelenebilir bir dosya içinde binary formatında saklar. PFX dosyalarının uzantıları genellikle .pfx veya .p12 şeklindedir. PFX dosyaları, Windows makinelere sertifika ve private key'leri yüklemek veya windows makinelerden sertifika ve private key'leri çekmek için kullanılan dosyalardır.  Anahtar çiftlerini ve CA’ye ait root sertifikayı  birlikte içeren sertifika dosyası oluşturmak ve oluşturulan  sertifikanın başka bir yere yüklenmesi  sırasında ek bir güvenlik önlemi olarak bir şifre eklenmesini sağlamak amacıyla pfx formatının kullanımı tercih sebebidir.

openssl.exe pkcs12 -export -in www.test.com.cer -inkey www. test.com.key -out www.test.com.pfx -certfile certificate_authority.cer

resim-18.png

Favori olarak ekle (0) | Görüntüleme sayısı: 11270

Bu yazıya ilk yorumu yazın

Sadece kayıtlı kullanıcılar yorum yazabilir.
Lütfen sisteme giriş yapın veya kayıt olun.

 
spacer.png, 0 kB
spacer.png, 0 kB
Copyright 2014 TÜBİTAK-BİLGEM. Sitenin teknik altyapısında Joomla kullanılmıştır. Yazar ve site referans gösterilmeden alıntı yapılamaz. Görüşleriniz
spacer.png, 0 kB