Anasayfa » Sertifika – Sertifika Oluşturma – Sertifika Türleri

Makaleyi Paylaş

Güvenlik

Sertifika – Sertifika Oluşturma – Sertifika Türleri

Merhaba, bu makalemde sizlere güvenlik sektöründe büyük bir önemi olan sertifika kavramından bahsedeceğim. Nerede ise sertifika kullanmadan güvenli iletişim kurmanın düşünülemeyeceği bir ortamdayız ve bu nedenle temel anlamda bu kavramları çok iyi biliyor olmamız gerekmektedir. Malumunuz ÇözümPark Bilişim Portalı olarak bizlerde her bilgi seviyesinden üyemiz için kaynak üretmeye gayret gösteriyoruz. Bende bu noktada üzerime düşen Sertifika konusunu sizler için detaylı bir şekilde ele alacağım.

Evet öncelikle tanımla ile başlayalım.

 

1. SSL Nedir?

 

SSL, internet ü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, internet 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.


 

2. Şifreleme Algoritmaları

 

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 Şifreleme Algoritması: Veriyi şifrelemek ve şifreli veriyi çözmek için 2 farklı anahtar kullanılmaktadır. Bunlar public key (açık anahtar) ve private key (gizli-kapalı 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.

 

3 .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 tarafından 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 tarafın kimliğini doğrular.

 

Sayısal imzada asimetrik şifreleme algoritmaları 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 hashi 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’i alınan mesajı, mesaj-ileti özeti olarak isimlendirebiliriz. Daha sonra bu mesaj özeti göndericinin private keyi ile şifrelenir. Böylece veri dijital olarak imzalanmış olur.

 

En basit tanımıyla sayısal imza, kişinin – kurumun public key’inin hash’inin alınması ve bu hash’in 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.

 

4. Sertifika Nedir?

 

Alıcı, göndericininn doğruluğunu sayısal imza ile kontrol eder. Peki gönderici, gönderdiği verinin gerçekten beklediği doğru kişiye-kuruma ulaştığından nasıl emin olur? Public key’ini kullanarak verileri şifrelediğimiz kişi – kurum gerçek kişi – 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’inin sertifika otoritesinin private key’i ile imzanmasından oluşur.

 

Sertifika = (Private KeyCA (Hash(Public Keykurum))) + Public Key = Sayısal İmza + Public Key

 

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

 

5. Sertifika İşlemleri

 

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ı. Bu csr dosyası Sertifika otoritesine gönderilir. Doğrulama işlemleri gerçekleştirildikten sonra Sertifika Otoritesi tarafında bize sertifka 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 yararlanacağız.

 

OPENSSL

 

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

 

Aşağıdaki linkten Windows 32 bit ve 64 bit ile uyumlu çalışan openssl paketini indirebilirsiniz.

 

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

 

Openssl’i ilk çalıştırdığımızda aşağıdaki hata ile karşılaşabiliriz.

 

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. Aşağıdaki komut satırını çalıştırarak sorun çözülmüş olur ve openssl sorunsuz çalışır.

 

set OPENSSL_CONF=c:\[OPENSSL DİZİNİNİ yazınız]\bin\openssl.cfg

 

 

5.1. Private Key Oluşturma

 

Öncelikle sertifikayı kullanacağımız sunucu üzerinde bir private key oluşturulmalıdır. Bu private key’i csr oluşumunda da kullanacağız. Bu aşamada Openssl sertifika sunucusunu kullanacağız.

 

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

 

>openssl genrsa -out privatekey.key 2048

 

 

image001

 

>openssl genrsa -des3 -out privatekey1.key 2048

 

 

image002

 

 

\openssl\bin dizini altında oluşturduğumuz private key’leri görebiliriz. İ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 komut, bizden şifre istiyor. Bu private key’i kullanarak CSR oluştururken bize bu aşamada oluşturduğumuz şifre sorulacak. Şifrenin doğru girilmesi durumunda csr oluşumu gerçekleşecek. Bu şifre private key’imizi koruyacağı için , bu şifre tahmin edilmesi zor ve güçlü bir şifre olmalıdır

 

5.2. 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’ın üretilme şekli, sunucu tarafında kullanılan web server yazılımına göre değişmektedir.

 

 

Apache Web Server üzerinde csr oluşturma

 

 

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

 

“openssl genrsa -des3 -out www.test.com.key 2048” komutu ile www.test.com.key dosyası içerisine private key’imizi kaydetmiş oluruz. Şimdi bu private key’i kullanarak csr’ımızı oluşturalım

 

 

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

 

 

image003

 

 

Bu komutu çalıştırdığımız zaman bize 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 etmek gerekir. Bu kısma SSL sertifikasını aldığımız web sunucusunun adresi başında http-https olmadan girilmedir.

 

Geçerli bir sertifika otoritesine gönderilmek üzere csr dosyamızı hazırlamış olduk. İstersek kendimiz de aşağıdaki şekilde CSR’ı kendimiz imzalayarak sertifikayı oluşturabiliriz. Fakat şu unutulmamalıdır ki, bu sertifika herhangi bir sertifika otoritesi tarafından doğrulanmış değildir. Diğer kullanıcıların tanımadığı CA tarafından imzalanan sertifikalar kullanılırken aşağıdaki gibi hata verir:

 

 

image004

 

 

Aşağıdaki örnekteki 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

 

 

image005

 

 

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

 

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

 

 

image006

 

 

 

Tomcat Web Server üzerinde csr oluşturma

 

 

Java diliyle yazılmış web uygulamaları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şuturulur; 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 oluşturulmalıdır. Keystore’u , anahtar (key) ve sertifika yönetim programı olan Java Keytool ile oluştururuz. 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 sertifkaların kendine özgü bir takma adı vardır diyebiliriz.

 

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şumunu 3 adımda anlatabiliriz.

 

1. Keystore dosyası içerisinde private key oluşturmak

2. Sertifikanın export edilmesi

3. Truststore dosyası içerisine sertifikanın import edilmesi

 

Adım 1 : Keystore oluşturma / Keystore dosyası içerisinde private key oluşturmak

 

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. (Diğer ö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

 

 

image007

 

 

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 oluştururken veya bizim tarafımızdan imzalanmış keystore’u kullanarak oluşturulmuş bir sertifikayı sisteme yüklerken aynı alias’ın kullanılması gerekmektedir. Ayrıca bize sorulan şifreyi, CSR oluştururken kullanmak üzere not almalıyız.

 

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

 

 

image008

 

 

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

 

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

 

 

image009

 

 

Bu komut ile CSR dosyasını oluşturmuş olduk.

 

Adım 2: Sertifika oluşturma

 

Eğer istersek kendimiz de aşağıdaki şekilde sertifikayı oluşturabiliriz. 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

 

 

image010

 

 

Oluşturduğumuz sertifikayı aşağıdaki şekilde kontrol edebiliriz.

 

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

 

 

image011

 

 

Adım 3: Sertifika’yı import etme

 

Truststore dosyası içerisine oluşturduğumuz sertifikanın aşağıdaki gibi import edilmesinden sonra işlemimiz tamamlanmış oldu.

 

 

image012

 

 

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

 

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

 

 

image013

 

 

6. Sertifikasyon Süreci

 

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

 

Bir Web sitesine geçerli bir sertifika otoritesi tarafından imzalanmış bir sertifika almak istediğimizde kısaca aşağıdaki adımları izleriz:

 

 

Öncelikle yukarda da anlattığımız şekilde bir private key ve CSR (Certificate Signing Request) oluşturmamız gerekmekte. Bu adım sonucunda Sertifika Otoritesine iletilmek üzere bir Csr dosyamız ve kimseyle paylaşmamamız gereken kişi/kurum’a özel private key’imiz oluşmuş olacak. CSR oluşumu kapsamında girilen bilgiler (5.2. Csr Oluşturma ) bir Registration Authority (RA) tarafından kontrol edileceği için dikkatli-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.)

 

 

RA’ya iletmek üzere sorumlu kişinin/kurumun/birimin iletişim bilgileri ve fatura/kurum bilgileri gibi bilgilerin yer aldığı bir başvuru formu doldurmamız gerekmektedir. Daha sonra oluşturduğumuz Csr ile beraber bu formu aşağıdaki belgelerle RA’ya göndeririz. Böylece sertifika talebinde bulunmuş oluruz.

 

 

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.

 

RA kendisine ilettiğimiz tüm bilgileri kontrol eder. Bu kontrol, yukardaki bilgilerin doğrulanması kadar başvuruyu kurum adına yapan kişinin de gerçekten yetkili olup olmadığını da içerir. Bilgilerin doğrulanması sonucunda, RA gerekli bilgileri sertifika otoritesine (CA) gönderir. CA bizim gönderdiğimiz public key’in Hash’ ini alıp kendi private keyi ile şifreler (Sayısal İmza). Daha sonra CA, bu public keyi ve bu hashi kullanarak sertifika üreterek tarafımıza iletir.

 

Sertifika = (Private KeyCA (Hash(Public Keykurum))) + Public Key = Sayısal İmza + Public Key

 

CA’den tarafımıza 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ı bize gelen sertifka formatını değiştirmemiz gerekebilir.

 

 

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

 

 

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

 

7.1. 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ı beklerler.

 

Cer uzantılı dosyayı Pem uzantılı dosyaya çevirmek için aşağıdaki komut dizilerini kullanabiliriz.

 

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

 

 

image014

 

 

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

 

7.2. DER Format

 

Pem ASCII formatında bir sertifika dosyası iken DER uzantılı sertifika dosyaları binary formatındadır. Bazı zamanlarda bu formattaki sertfikaları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 sertifkayı 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 aşağıdaki komut dizilerini kullanabiliriz.

 

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

 

 

image015

 

 

Der uzantılı dosyayı der uzantılı dosyaya çevirmek için aşağıdaki komut dizilerini kullanabiliriz

 

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

 

 

image016

 

 

7.3. 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 – sertifika çiftlerini içerir, private key’i içermez. Microsoft Windows ve Java Tomcat dahil olmak üzere çeşitli platformlar P7B formatını desteklerler.

 

Cer uzantılı dosyayı P7B formatlı bir sertifikaya çevirmek için aşağıdaki komut dizilerini kullanabiliriz.

 

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

 

 

image017

 

 

7.4. 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 keyleri yüklemek veya windows makinelerden sertifika ve private keyleri ç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 sertfikanı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

 

 

image018

 

Makalemizin sonuna geldik. Umarım faydalı bir makale olmuştur, bir sonraki makalede görüşmek üzere

 

Makaleyi Paylaş

1 Yorum

  1. paylaşım için teşekkürler.

    Cevapla

Cevap bırakın

Email adresiniz gizli kalacak Zorunlu alanlar * olarak işaretlenmiştir

Bunları kullanabilirsinizHTML etiketler ve öznitelikleri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>