30 Ekim 2010 Cumartesi

OpenSSL

Öncelikle OpenSSL hakkında genel bir bilgi vermek gerekir. OpenSSL ile ilgili genel ve güzel bir yazı var onu paylaşıp daha sonra windows sistemi altında OpenSSL sertifikası nasıl üretilir ve diğer aşamalarını yazacağım.

OpenSSL nedir?
OpenSSL projesi güvenliği geliştirmek için çaba harcayan ticari, geniş özellikli ve açık kaynak kodlu, Güvenli Soket Katmanı (SSL v2/v3), İletim Seviyesi güvenliği (TLS v1) protokollerini uygulayan, çok güçlü genel amaçlı bir şifreleme kütüphanesidir. Bu proje bütün dünyada iletişim, plan ve OpenSSL araçlarını geliştirmek için interneti kullanan gönüllüler topluluğu tarafından yönetilir.
Bilindiği üzere SSL sertifikaları global firmalar tarafından oldukça yüklü rakamlara (Ücretlere) üretiliyorlar. Aslinda bu sertifikaları kendimiz üretmek mümkün, bunun için kendiniz sertifika sunucusu kurabilir ve işletebilirsiniz. OpenSSL organizasyonu burada devreye giriyor, ve bir kaç küçük program ile kendi sertifikalarınızı üretmenize olanak veriyor.

Neden o zaman GlobalSign , VeriSign gibi kurumlara 100 lerce dolar ödeniyor?
Bunun başlıca sebeplerinden birisi güvenlik, diğeri ise üst taraflarda dönen anlaşmalar. Browserlar belirli kurumlar dışındaki (akredite kurumlar) üretilen sertifikaları güvenli bulmayıp kullanıcıya hata mesajı vermektedir.
SSL'i örneklendirirsek biraz daha rahat anlaşılabilir. Bir işiniz var halletirmek istiyorsunuz ve halledeceğiniz yere gittiğinizde karşınıza çıkan görevliye, ben filan patronun selamıyla ve imzasıyla geliyorum diyorsunuz. Eğer karşıdaki adam patronu biliyorsa imzaya bakıp tamam bu güvenilir bir adam ve selamda geçerlidir diyecek ve sizde böylelikle rahatlıkla işinizi yaptırabileceksiniz.
Aynı şekilde, siz bir e-ticaret sitesi yapıp kullanıcıya güvenli hat gerektiren ödeme gibi bir hizmet vermek istiyorsunuz. SSL sertifikanızı GlobalSign, VeriSign gibi firmalardan aldığınızda, başkası bu sertifikayı taklit edemeyeceği için sisteminizi kullanan müşteri sertifika detaylarında hem siteniz kime aitmiş hemde yukarıda kimin tarafından akredite edilmiş bilgisine ulaşacak, hımm bu patron'un (Verisign) bilgisi ve imzası ile geldiyse bu güvenilir biridir diyecektir.
Kendi kendizine sertifika ürettiğinizde sorun burada başlıyor. Eğer OpenSSL gibi bir sistem ile ürettiyseniz sertifikanızı karşıdaki adama gösterdiğiniz imza kendi imzanız olacaktır. Yani adama diyorsunuzki, ben kendi selamım ve imzam ile geldim, patron benim. Burada inanıp inanmamak kullanıcıya kalıyor. 
Bu yüzden son kullanıcıya hizmet verecekseniz mutlak surette üst güvenlik kurumlarından imza (sertifika almalısınız). Eğer kendi kurum içinizde uygulama yapacaksanız sertifikayı kendiniz üretip kara geçebilirsiniz. Mesela kendiniz bir mesajlaşma sunucusu ve programı yazdığınızda, sunucuda programda aynı yapıda sertifikalar kullanıp ucuz ve güvenilir mesajlasma yapabilirsiniz.

Alıntı : http://www.bybilgi.com/openssl-t-2115.html

Windows ile OpenSSL Sertifikası Yaratmak

Şimdi windows altında OpenSSL sertifikası nasıl yaratılır bakalım. Öncelikle aşağıdaki adres OpenSSL'in işletim sisteminiz için uygun versiyonunu indirin.

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

OpenSSL'i indrip makinamıza kurduk.Kurulum sonrası OpenSSL'in nereye kurulduğundan emin olmak için C:\ altında nereye kurulduğuna bakalım.İşletim sisteminize göre "C:\OpenSSL-Win64" gibi bir uzantı olucaktır büyük ihtimalle.Dosya uzantısından emin olduktan sonra Çalıştır'a gelerek "cmd" komutu vererek komut satırını açıp işlemlere başlıyoruz.

Öncelikle komut satırında aşağıdaki komutu girerek openssl'in kurulduğu uzantıda bin klasörü içine gidiyoruz.

*cd c:\openssl-win64\bin 

Şimdi bu dosya komundaki openssl.exe'yi kullanarak Root CA için bir özel anahtar oluşturacağız.(Root CA- Yerel Bilgisayarımızdaki en üst sertifika birimidir.Açılımı CA->certification authority)Bu özel anahtarı da aşağıdaki komut ile oluşturuyoruz.Bu komutta des3 şifreleme algoritması ile 2048 bitlik bir anahtar oluşturuyoruz.İhyitaca göre algoritma ve şifreleme bit uzunluğu değiştirilebilir.

*openssl genrsa -des3 -out ca.key 2048

Şimdi ise yine Root CA için bir genel anahtar oluşturucağız.Burada "-days" ten sonraki 365 bu sertifikanın kaç gün geçerli olacağını gösterir ve ihtiyaca göre değiştirilebilir.Ayrıca bu satırdan sonra bize sertifikamız ile ilgili bilgileri sorucaktır ve doldurmamızı isteyecektir.

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

Bu aşamaya kadar başarılı bir şekilde gelebildiysek Root Ca için sertifikamızı oluşturduk demektir.Oluşan sertifikayı yine Openssl'i yüklediğimiz uzantının bin klasörü içinde bulabiliriz.(C:\OpenSSL-Win64\bin , ca.crt)

Şimdi ise sunucumuz için sunucu sertifikası olarak geçen bir ara sertifika oluşturup imzalayacağız.(Intermediate Certificate). Öncelikle sunucumuz için de yine bir özel anahtar oluşturuyoruz.

*openssl genrsa -des3 -out server.key 2048

Şimdi ise Root CA'dan gelen sertifikayı imzalamak için bir sertfika yaratıyoruz.Bu aşamadan sonra yine bize sertifika bilgilerimizi sorucak ve bu aşamada son iki soruyu (challenge password ve optional componay name) boş geçebiliriz.

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

Bu satırda ise sunucumuz için bir genel anahtar oluşturuyoruz.Yine bu satırdaki 365 bizim sunucu sertifikamızın geçerli olacağı gün sayısını belirtmekte ve bu sayıyı değiştirebilmekteyiz.

*openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

Genel olarak Sunucu ve Root CA için anahtarlarımızı oluşturduk.Şimdi ise signtool(Cab dosyası imzalama aracı) ve IIS için kullanabileceğimiz kombine bir sertifika oluşturuyoruz.Burada sunucu özel anahtarımızı ve genel anahtarını bu sertifikaya gömüyoruz.

*openssl pkcs12 -export Certificate.pfx -inkey server.key -in server.crt

Bu son satırdan da sonra şuan "C:\OpenSSL-Win64\Bin" klasörü içinde Certificate.pfx isimli ,IIS ve dosya imzalamada kullanabileceğimiz bir sertifikamız var.

Peki bu sertifika ile nasıl cab dosyası veya dll imzalarım?

Öncelikle bu sertifikaların yerel makinamızda tanınması gerekiyor.Bunun için öncelikle istersek Internet Explorer'dan;

->Internet Options -> Content -> Certificates  .... bölümüne gelerek aşağıdaki uzantılı sertifikaları gösterdiğim birimlere ekleyebilirsiniz fakat ->Run -> MMC -> Files -> Add/Remove Snap in ... ile sertifikaları yerel makinamıza tanıtabiliriz.

ca.crt -> Trusted Root Cetification bölümüne kuruyoruz.
server.crt -> Intermediate Certification bölümüne kuruyoruz.
Certificate.pfx -> Personal bölümüne kuruyoruz.

Daha sonra yine ilk olarak komut satırına giriyoruz.Daha sonra "Platform sdk" nerede yüklü ise o konuma gidiyoruz aşağıdaki satırla.

*cd c:\Program Files\microsoft platform sdk\bin

Daha sonra aşağıdaki satırı girerek imzalama sihirbazını açıyoruz ve gerisi zaten sihirbazdan :)

*signtool signwizard

Sertifikamızı IIS'e Eklemek

Ayrıca sertifikamızı IIS'e eklemek istersek Server Certificates bölümünden .pfx uzantılı sertifikamızı import diyerek ekliyoruz.Daha sonra IIS2de sitemize gelerek sağ taraftaki toolbar'da "bindings" bölümünden "https" olarak ekliyoruz ve herşey bitiyor...