Sll Kullanimi!!!

[email protected]_baba

Katılımcı Üye
18 Ara 2007
273
9
SSL Giriş


Temelleri Netscape firması tarafından 1994 yılında atılan SSL aynı yılda ticari olarak piyasaya sürüldü ve bir sonraki yıl IETF tarafından standart olarak Kabul edildi. Aslında standartın asıl ismi TLS olmasına rağmen genellikle SSL kullanımı tercih edilmektedir. Yani TLS 1 ile SSL 3.1 aynı özelliklere sahiptir. Ilk zamanlar sadece HTTP trafiğini şifreleme amaçlı geliştirilmiş olsa da günümüzde TCP tabanlı tüm servisleri şifreleme amaçlı kullanılabiliyor.

ALINTIDIR BİLGİLERİNİZE!!!

Şifreleme algoritmaları

Simetrik ve asimetrik olmak üzere iki çeşittir. Simetrik anahtarlı şifreleme algoritmalarında bir veriyi şifrelemek ve şifreli veriden orjinal veriyi elde etmek için aynı anahtar kullanılır. Burada bir anahtar değişim problemi vardır, ortak anahtar nasıl iki tarafa ulaştırılacak?

Asimetrik (Açık anahtarlı şifreleme) Algoritmalar

Bu tip algoritmalarda veriyi şifrelemek ve çözmek için iki anahtar kullanılır. Veriyi şifrelemek için bir anahtar(public key), çözmek için diğer anahtar(private) kullanılır.

Benim public anahtarım kullanılarak şifrelenmiş bir veri ancak benim private anahtarım kullanılarak çözülebilir. Bu yüzden asimetrik algoritmalarda açık anahtar(public key) dağıtılır, gizli anahtar(private key) saklanır.

Bir de bunların haricinde mesaj özeti(message digest) olarak adlandırılan ve veri bütünlüğünü koruma amaçlı kullanılan tek yönlü çalışan hash algoritmaları vardır, md5 , sha gibi.


Sayısal İmza Kavramı

Verinin içeriğinin değiştirilme durumu ve göndereninin gerçekliliğini ispat söz konusu ise sayısal imza kullanılır. Sayısal imza kısaca yazılan mesajın özetinin gizli anahtar ile şifrelenmesi ve bir sıra numarası eklenmiş halidir.

Gönderici;

1) Mesajı gönderecek mesajın özetini alır
2) gizli anahtarını kullanarak özeti şifreler ve bir sıra numarası ekler.

Alıcı;
1) Alıcı göndericinin açık anahtarını kullanarak şifreyi çözer
2) Şifre çözüldükten sonra ortaya gönderilen mesajın özeti çıkar
3) Aynı algoritma kullanılarak mesaj özet işlemine tabi tutulur ve doğruluğu control edilir.




Sertifikalar

Sayısal imzaları kullanarak bir verinin gerçekten beklenen kişi tarafından gönderildiği ve iletim esnasında değişikliğe uğramadığını anlayabiliriz peki gönderilen verinin gerçekten beklediğimiz insana ulaştığından nasıl emin olabiliriz? Yani açık anahtarını kullanarak verileri şifrelediğimiz kişi gerçekte düşündüğümü kişi midir? Nasıl emin olabiliriz.
Burada sertifika tanımı ortaya çıkıyor. Bir sertifika basitce kişinin açık anahtarının yetkili bir sertifika otoritesi tarafından imzalanmış halidir diyebiliriz.

Sertifika Otoritesi

Sertifika isteğinde bulunan şahıs/kurumların gerçekte belirttikleri kişiler/kurumlar olduklarını(bunun yanında belirtilen diğer hususları da) doğrulayan ve onaylayan kurumdur. Verisign, Globalsign gibi..

Eğer her iki tarafta ortak güvenilen bir sertifika otoritesi tarafınfdan imzalanmış sertifika kullanıyorsa birbirlerinin public keylerine güvenebilirler.

Özgür bir SSL sürümü: OpenSSL


Temel OpenSSL Kullanımı


OpenSSL dosyalarının hangi dizinde bulunduğunu öğrenmek için;

# openssl version -d
OPENSSLDIR: "/usr/share/ssl"
Komutu kullanılabilir. Bu dosyaları daha akılda kalıcı bir dizinden yönetmek istersek aşağıdaki komut işimizi görecektir. Bu komut sonrasında openssl ile ilgili dosyalar /etc/ssl dizini altından da erişilebilir olacaktır.

#ln -s /usr/share/ssl/ /etc/ssl

Hangi OpenSSL sürümü ile çalıştığınızı öğrenmek için ,

# openssl version
OpenSSL 0.9.7a Feb 19 2003

Komutunu kullanabilirsiniz. Detaylı bir çıktı almak istenirse openssl version –a komutu da kullanılabilir.

OpenSSL ile yardım alma.

OpenSSL kullanırken parametrelerin neler olduğunu ve bunların detaylarını öğrenmek için –h parametresini kullanılabilir. Mesela genel openssl kullanımı için

#openssl -h
openssl:Error: '-h' is an invalid command.

Standard commands
asn1parse ca ciphers crl crl2pkcs7
dgst dh dhparam dsa dsaparam
enc engine errstr gendh gendsa
genrsa nseq ocsp passwd pkcs12
pkcs7 pkcs8 rand req rsa
rsautl s_client s_server s_time sess_id
smime speed spkac verify version
x509

Message Digest commands (see the `dgst' command for more details)
md2 md4 md5 rmd160 sha
sha1

Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc
aes-256-ecb base64 bf bf-cbc bf-cfb
bf-ecb bf-ofb cast cast-cbc cast5-cbc
cast5-cfb cast5-ecb cast5-ofb des des-cbc
des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx rc2 rc2-40-cbc
rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb
rc4 rc4-40




Standart komutlardan biri ile ilgili yardıma ihtiaç duyarsak openssl komut_adi –h ile detay bilgi edinebiliriz.

# openssl gendsa -h
usage: gendsa [args] dsaparam-file
-out file - output the key to 'file'
-des - encrypt the generated key with DES in cbc mode
-des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes
-engine e - use engine e, possibly a hardware device.
-rand file:file:...
- load the file (or the files in the directory) into
the random number generator
dsaparam-file
a DSA parameter file as generated by the dsaparam command





Kendi Sertifika Otoritemizi (CA) oluşturmak

Kendi sertifika otoritemizi oluşturmak ancak bize bağlı çalışan istemciler/sunucular arası gizliliği sağlayabilir. Bunun için gerekmedikçe kendi CA yapımızı kullanmaktan kaçınmalıyız. Tekrar hatırlatmakta fayda var: bir CA’nin görevi güven ilişkisini sağlamaktır.

Kendi yönettiğimiz CA’i oluşturmak için sistemde bir dizi komut çalıştırmamız gerekir.

#cd /etc/ssl
#touch index.txt
#echo ‘01’ >serial



# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf
Generating a 1024 bit RSA private key
...........................++++++
..................++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:test123
Verifying - Enter PEM pass phrase:test123
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:TR
State or Province Name (full name) [Berkshire]:Istanbul
Locality Name (eg, city) [Newbury]:Uskudar
Organization Name (eg, company) [My Company Ltd]:Snort A.S
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:snort-home
Email Address []:[email protected]




-new -x509 yeni bir sertifika oluştur
-extensions v3_ca CA sertifikası oluşturmak için
-days 3650 3650 sertifika geçerlilik süresi
-keyout, -out çıktıları göstermek için
-config ./openssl.cnf belirtilen konfig dosyasını kullanacağını belirtir.
Bu komut sonrasında bulunduğumuz dizinde(/etc/ssl) cacert.pem ve private dizininde cakey.pem adlı iki dosya oluşacaktır. Buradaki cakey.pem dosyası saklanması gereken dosyadır bize(CA olduk artık )herhangi bir sertifika imzalama isteği geldiğinde bu dosyayı kullanarak imzalama yapacağız.


NOT: CA sertifikasını sıkı bir parola ile korumak gerekir ve her imzalama isteği geldiğinde bu parola ile yapılmalıdır.. Zira bu sertifikayı ele geçiren biri bizim adımıza sertifika imzalayabilir.

Diğer dosya ise bize güvenecek istemcilerde bulunması gereken dosyadır. Bu dosyayı cacert.crt olarak yeniden adlandıralım

#mv cacert.pem cacert.crt

Sonra bu dosyayı istemcilerimize yüklemek için onların ulaşabileceği bir yere koymamız gerekir. İstemcilerimiz bu dosyayı edinip kullandıkları browserlara’a(ya da ssl istemcisi programlara) import etmeleri gerekir.

Internet Explorer için:

“Tools > Internet Options > Content > Certificates > Trusted Root Certificate Authorities"






Buradan ekleme yerine cacert.crt dosyasının üzerine çift tıkladığınızda size sertifikayı yüklemek istediğinize dair bir soru soracaktır buradan da ekleyebilirsiniz.


NOT: Bir root sertifikanın geçerlilik süresi dolduğunda bu sertifika ile imzalanmış tüm sertifikalarda geçersiz olacağı için root sertifikaların geçerlilik süreleri olabildiğince uzun verilmelidir.


Yeni Bir sertifika isteği oluşturmak (certificate-signing request - CSR)

Öncelikle bir private key oluşturup bu private keyi kullanarak CSR oluşturacağız. CSR oluşturmanın farklı yolları da var fakat burada bir tanesini kullanıyor olacağız.

Gizli anahtar(Private key) oluşturma;

#openssl genrsa -out sunucu.key 1024


#openssl req -new -key sunucu.key -out sunucu.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:TR
State or Province Name (full name) [Berkshire]:.
Locality Name (eg, city) [Newbury]:.
Organization Name (eg, company) [My Company Ltd]:.
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:snort-home
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:



NOT: sorulan sorularda boş bırakmak istediğiniz alanlar için .(nokta) kullanınız, Enter’a basarak geçtiğiniz alanlar default değerler ile doldurulacaktır.

NOT: Sunucu sertifikası oluştururken parola kullanırsak sertifikayı kullandığımız servisi her yeniden başlatmımızda parolayı girmemiz gerekecektir.

Oluşan .csr dosyasının içeriği;

# cat sunucu.csr
-----BEGIN CERTIFICATE REQUEST-----
MIIB1TCCAT4CAQAwgZQxCzAJBgNVBAYTAlRSMREwDwYDVQQIEw hJU3RhbmJ1bDEQ
MA4GA1UEBxMHVXNrdWRhcjESMBAGA1UEChMJRW5kZXJVTklYMR EwDwYDVQQLEwhT
ZWN1cml0eTETMBEGA1UEAxMKc25vcnQtaG9tZTEkMCIGCSqGSI b3DQEJARYVaHV6
ZXlmZUBlbmRlcnVuaXgub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4 GNADCBiQKBgQC7
zfpHyTPgT3jeVwafDkbohxEHiaWksDdWGfxCDrSHT1IqqePLyl qHBRzf6anU3qoX
8chJQ7gKS8nwEWAKONRpoycCUkFIolq67K9cgVzpQrIrBC0An0 O9zcjht9u6ivDU
mulARPyA0gQw2423+Dhw776Rg1Iaz2uFjUB1I+gN6wIDAQABoA AwDQYJKoZIhvcN
AQEEBQADgYEASnVKLebYGbOFtvo85jkD1dZo/BwrSbQ3d1dBtmmjWK5n4M1gf3FM
1lkWREcFL/AshdK7bM68QJgXO4F0uKbzRmrABZmM4fhCle0feUrqh8AGLuoV fqFw
cA2D1mdf4HXkVy5Hw4lqctFUnB6+3e8ktHEeCrmnMQmKoVV6+o ZrmZk=
-----END CERTIFICATE REQUEST-----








CSR oluşturduktan sonra sunucu.csr dosyasını ya bilinen bir CA’ya gönderip imzalamalarını isteyeceğiz –ki bu iş oldukça prosedürel bir iştir, şirketinizin varlığını ispat edip gerekli tüm belgeleri CA’ya ya da onun için bu işleri yapan firmaya teslim etmek zorundasınız- ya da kendi oluşturduğumuz sertifika otoritesi (CA) ile imzalayacağız.


CA Tarafından sertifika imzalama isteğinin gerçekleştirilmesi

# openssl ca -out sunucu.pem -config /etc/ssl/openssl.cnf -infiles sunucu.csr
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for ./private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Nov 13 07:51:41 2006 GMT
Not After : Nov 13 07:51:41 2007 GMT
Subject:
countryName = TR
organizationalUnitName = IT
commonName = snort-home
emailAddress = www.testdomain.com[/URL] için yetkili bir sertifika otoritesinden (Verisign, Globalsign vs) sertifikamızı almış olalım.


Istemci , ssl siteye bağlanan tarafı belirtir.
Sunucu, ssl çalışan sistemi gösterir olsun, bu ikisi arasındaki güvenli iletişim aşağıdaki adımlardan oluşur.

Istemci sunucuya, ClientHello olarak adlandırılan ve istemcinin desteklediği şifreleme algoritmaları, sıkıştırma algoritmaları gibi özellikleri belirten bir mesaj gönderir.

Sunucu bu mesajı alır ve istemciye uygun seçtiği algoritmaları vs bildiren bir mesaj gönderir. Bu mesaj ServerHello olarak geçer.


https testi
$ openssl s_client -connect localhost:443 -state -debug
GET / HTTP/1.0

Apache için HTTPS Ayarları

Apache de SSL kullanmak istiyor ve yetkili CA(certificate authority )lara para vermek istemiyorsanız kendi sertifikanızı kendiniz oluşturup->imzalayıp kullanabilirsiniz.

Sonuç olarak web trafiğinizi şifrelemiş olursunuz fakat oluşturduğunuz sertifika Browserlar(Ms Explorer, Mozilla Firefox vs) tarafından tanınmayacağı için siteye her girişte kullanıcıyı uyaran bir yazı çıkacaktır, kullanıcı bu uyarıyı "yes" olarak geçerse şifreli alana adım atmış olur, "no" derse giriş yapamaz "view" diyerek de sertifika hakkında daha detaylı bilgi alabilir.

tmp dizinine geçerek sertifikamızı oluşturalım.
#cd /tmp
#openssl genrsa -out hostname.key 1024
#openssl req -new -key hostname.key -out hostname.csr

bu 2 komut sonrası oluşan sertifikanızı herhangi bir yetkili CA ya yollayıp imzalamalarını istiyebilirsiniz(parali) ya da aşağıdaki komutla kendiniz imzalayabilirsiniz.

#openssl x509 -req -days 710 -in hostname.csr -signkey hostname.key -out hostname.crt

oluşan hostname.crt ve hostname.key dosyalarını apache konfigurasyon dizinine taşıYasak Kelime , httpd.conf ta bunların yerini belirtiniz.

httpd.conf taki tanımlar aşağıdakine benzerl olmalı

SSLCertificateFile /etc/httpd/conf/hostname.crt
SSLCertificateKeyFile /etc/httpd/conf/hostname.key



***Tüm bunları kullanabilmek için sisteminizde OpenSSL paketi olmalıdır ve apache mod_ssl desteği ile derlenmiş olmalıdır.

*** red hat sistemleti için ssl ayarları
/etc/httpd/conf.d/ssl.conf tur, buradan gerekli düzenlemeleri yapabilirsiniz.


Neden name-based sanal host tanımlarında SSL kullanırken her host başına bir IP gerekiyor?

isim tabanli sanal host kavramı (name-based virtual hosting) bir IP üzerinden birden fazla hostu sunma için kullanılan bilindik bir yöntem. Fakat bu yontem eger host edilen sunucularda SSL kullanilacaksa ise yaramiyor. Neden mi?

Bir IP uzerinden birden fazla host sunma Http isteklerinde taşınan Host başlığına baglidir.
Bir http istegi olusturuldugunda host basligi hedef IPdeki hangi hostu istedigini belirtir. Bizim web sunucumuza gelen istek apache(ya da baska bir web sunucu) tarafindan yorumlanarak uygun site kullaniciya gosterilir.


SSL destekli bir web sunucuda bir hosta gelen HTTPS isteğinde Host headeri şifreli olarak geleceği için(OSI katmaninda SSL HTTP'den once, yani http istekleri sifrelenmis oldugu icin) web sunucu Host alanını okuyamaz ve o alan adina ozel islemler gerceklestiremez, dolayisi ile istenilen siteyi gösteremez, bu yüzden virtual host ile birlikte SSL kullanilamaz , bunun yerine Ip tabanli sanal host kullanilmalidir.
ALINTIDIR BİLGİLERİNİZE!!!
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.