Upload
tolga-akkapulu
View
359
Download
4
Embed Size (px)
Citation preview
www.tolgaakkapulu.com 18 Ekim 2016
OPENSSL İLE SSL KURULUMU -
UBUNTU SERVER 14.04, 15.04, 16.04
Bu yazımda OpenSSL kullanarak Ubuntu Server'a nasıl SSL kurulabileceğine değineceğim.
Kuruluma geçmeden önce SSL nedir, nasıl çalışır, biraz ona değineceğim.
SSL Taşıma Katmanı Güvenliği (TLS) ve onun öncülü/selefi olan Güvenli Soket Katmanı
(SSL), bilgisayar ağı üzerinden güvenli haberleşmeyi sağlamak için tasarlanmış kriptolama
protokolleridir. X.509 sertifikalarını kullanırlar ve bundan dolayı karşı tarafla iletişime
geçeceklerin kimlik doğrulaması asimetrik şifreleme ile yapılır ve bir simetrik anahtar
üzerinde anlaşılır. Bu oturum anahtarı daha sonra taraflar arasındaki veri akışını şifrelemek
için kullanılır. Bu, mesaj/veri gizliliğine ve mesaj kimlik doğrulama kodları için mesaj
bütünlüğüne izin verir. Protokollerin birçok versiyonu ağ tarama, elektronik mail, İnternet
üzerinden faks, anlık mesajlaşma ve İnternet üzerinden sesli iletişim gibi uygulamalarda
yaygın olarak kullanılmaktadır. Bu durumda/içerikte/bağlamda en önemli özellik iletme
gizliliğidir. Bundan dolayı kısa süreli oturum anahtarı, uzun süreli gizli simetrik anahtardan
türetilmemelidir.
Netscape tarafından 1994 yılında geliştirilen Secure Sockets Layer (Güvenli Soket
Katmanı) protokolü, internet üzerinden güvenli veri iletişimi sağlayan bir protokoldür. SSL
2.0 1995 yılında ve SSL'in günümüzde kullanılan versiyonu olan SSL 3.0 da 1996 yılında
RFC 6101 koduyla piyasaya sürülmüştür. Daha sonra IETF ( İnternet Mühendisliği Görev
Gücü), SSL'in bir standart haline gelebilmesi için bir girişimde bulundu ve SSL 3.0'ı temel
alan yeni bir protokol üzerinde çalışmaya başladı. IETF, Ocak 1999'da bu yeni protokolü TLS
1.0 (Transport Layer Security) adıyla ve RFC 2246 koduyla piyasaya sürdü. TLS 1.1 Nisan
2006'da RFC 4346 koduyla, TLS 1.2 Ağustos 2008'de RFC 5246 koduyla yayınlanmıştır.
Mart 2015 itibarıyla TSL 1.3 taslak halindedir. Henüz yayınlanmamıştır.
Yerini yavaş yavaş TLS 1.3'e bırakmış olsa da SSL 3.0 günümüzde tüm internet tarayıcıları
tarafından desteklenmektedir.
İnternet tarayıcıların herhangi bir yerinde görülen asma kilit resmi, o siteye yapılan
bağlantının SSL/TLS ile şifreli bir şekilde yapıldığını göstermektedir. Bazı tarayıcılarda bu
asma kilit ikonuna tıklanarak SSL sertifikasının kimden alındığı, sitenin açık anahtar değeri,
geçerlilik süresi, özet algoritması ve versiyon bilgisi gibi bilgiler görüntülenebilir.
SSL/TLS Çalışma Prensibi
İstemci ve sunucu TLS protokolü kullanmayı
kararlaştırdıktan sonra, el sıkışma süreci
kullanarak kararlı bir bağlantı kurarlar. Bu el
sıkışma esnasında, istemci ve sunucu
bağlantının güvenliğini sağlamak için çeşitli
parametreler kullanmayı kararlaştırır:
www.tolgaakkapulu.com 18 Ekim 2016
1
İstemci kendi SSL sürüm numarasını, şifre ayarlarını, oturuma özgü veriyi, ve sunucunun istemciyle
iletişime geçmek için ihtiyaç duyduğu diğer bilgileri sunucuya gönderir.
2
Sunucu kendi SSL sürüm numarasını, şifre ayarlarını, oturuma özgü veriyi, ve istemcinin sunucuyla
iletişime geçmek için ihtiyaç duyduğu diğer bilgileri istemciye gönderir. Sunucu aynı zamanda kendi
sertifikasını da istemciye gönderir. Eğer istemci sunucunun kimlik doğrulama gerektiren bir
kaynağına ulaşmak isterse, sunucu istemcinin sertifikasını talep eder.
3
İstemci sunucunun gönderdiği bilgileri kullanarak sunucuyu doğrular. Eğer sunucu doğrulanmazsa,
kullanıcı hata uyarısı alır, şifrelemenin ve doğrulamanın sağlanamadığı hakkında bilgilendirilir. Eğer
sunucu doğrulama başarılı olursa, istemci bir sonraki adıma geçer.
4
İstemci oturum için bir ikincil paylaşılan gizli veri (sunucu işbirliğiyle ve şifreleme algoritmasına göre
değişen) oluşturur, bunu sunucunun açık anahtarını kullanarak şifreler (2. adımda sunucunun
sertifikasını elde etmişti) ve bu şifrelenmiş ikincil paylaşılan gizli veriyi sunucuya gönderir.
5
Eğer sunucu istemciden kimlik kanıtlaması isterse (el sıkışmada isteğe bağlı bir adımdır) istemci aynı
zamanda yeni bir veri imzalar. Bu veri el sıkışma için eşsiz olmalı ve hem istemci hem de sunucu
tarafından bilinmeli. Bu durumda, istemci imzalanmış veriyi, kendi sertifikasını, şifrelenmiş ikincil
paylaşılan gizli verinin yanında istemciye yollar.
6
Eğer sunucu istemciden kimlik kanıtlamasını istediyse, sunucu istemciyi doğrulamayı dener. Eğer
istemci doğrulanmazsa, oturum sonra erer. Eğer istemci başarıyla doğrulanırsa, sunucu kendi gizli
anahtarını kullanarak ikincil paylaşılan gizli veriyi deşifreler, ve daha sonra bir dizi adımlar takip
ederek esas paylaşılan gizli veriyi oluşturur (istemci de ikincil paylaşılan gizli veriden başlayarak aynı
adımları izler).
7
İstemci ve sunucu elde ettikleri esas paylaşılan gizli veriyi kullanarak oturum anahtarları oluşturur,
ki bu anahtarlar simetrik olup SSL oturumu boyunca şifreleme ve deşifreleme bilgilerinin
değişiminde ve verilerin bütünlüğünün kontrol edilmesinde kullanılır (bu da, SSL bağlantı süresi
boyunca verinin gönderilme saati ile alınma saati arasında herhangi bir değişikliğin olup olmadığı
saptanarak yapılır).
8
İstemci sunucuya bundan sonra kendisinden gelecek mesajların oturum anahtarıyla şifreleneceği
bilgisini içeren bir mesaj gönderir. Ardından istemci farklı bir (şifrelenmiş) mesaj göndererek el
sıkışmanın kendisine ait kısmının bittiğini belirtir.
9
Sunucu istemciye bundan sonra kendisinden gelecek mesajların oturum anahtarıyla şifreleneceği
bilgisini içeren bir mesaj gönderir. Ardından sunucu farklı bir (şifrelenmiş) mesaj göndererek el
sıkışmanın kendisine ait kısmının bittiğini belirtir.
SSL el sıkışması artık sonra ermiş ve oturum açılmıştır. İstemci ve sunucu birbirlerine gönderdikleri
verileri şifrelemek, deşifrelemek ve bütünlüğünü tasdik etmek için oturum anahtarlarını kullanırlar.
Bu güvenli kanalın normal işleyiş durumudur. Herhangi bir zamanda içeriden veya dışarıdan bir uyarı
alınırsa, taraflardan biri bağlantının yeniden kurulmasını talep edebilir ve böylece süreç kendisini
tekrarlar.
www.tolgaakkapulu.com 18 Ekim 2016
Eğer yukarıdaki adımlardan birisi başarısız olursa, TLS el sıkışması başarısız olur ve bağlantı
oluşturulamaz.
OpenSSL OpenSSL, SSL ve TLS protokollerinin açık kaynak kodlu uygulamasıdır. C programlama dili ile yazılmış
ana kütüphane temel kriptografik fonksiyonları uygular. OpenSSL'i farklı programlama dilleriyle
kullanabilmek için geliştirilmiş ara yazılımlar da bulunmaktadır.
Yazılımın 1.0.1 sayılı kararlı sürümü 15 Ekim 2014'te yayımlanmıştır.
OpenSSL Kurulumu SSL/TLS ve çalışma prensibi ile OpenSSL hakkında temel bilgi edindikten sonra OpenSSL'in
kurulumuna başlayabiliriz. OpenSSL'i Ubuntu Server 16.04'e kurmak üzere işlemlere geçebiliriz.
Öncelikle sunucumuzun IP adresini öğrenmek için komut satırına "ifconfig" yazıyoruz.
IP adresim yani sunucumun adresi 192.168.11.164. OpenSSL'i yüklemeden önce taraycıdan
sunucumu kontrol ediyorum.
Tarayıcıda da görüldüğü gibi henüz SSL ile güvenliğin sağlanmadığı görülüyor.
Kurulum için öncelikle sunucumuzu "sudo apt-get update" komutu ile güncelliyoruz.
www.tolgaakkapulu.com 18 Ekim 2016
Ardından "sudo apt-get install apache2" komutu ile Apache2 sunucusunu yüklüyoruz. Yüklü ise
güncelliyoruz.
Aslında SSL desteği Ubuntu 14.04, 15.04, 16.04 Apache paketinde standart olarak gelir. Ancak
sistemimizde SSL'den yararlanabilmek için SSL modülünü aktif ediyoruz. Aktif etmek için "sudo
a2enmod ssl"komutunu terminale yazıyoruz.
SSL modu etkinleştirildikten sonra, değişikliğin gerçekleşmesi için web sunucusunu (apache2) "sudo
service apache2 restart" komutu ile yeniden başlatıyoruz.
Sertifika dosyalarını yerleştirmek üzere Apache yapılandırma hiyerarşisinde alt bir dizin
oluşturuyoruz. Bunu gerçekleştirmek için terminale "sudo mkdir /etc/apache2/ssl" yazıyoruz.
www.tolgaakkapulu.com 18 Ekim 2016
Alt dizinimizi oluşturduktan sonra sertifikayı oluşturma aşamasına geçebiliriz. Sertifika oluşturmak
için "sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt" komutunu kullanacağız. Terminale
yazmadan önce parametrelerin ne anlama geldiğine ve ne işe yaradıklarına göz atalım.
openssl Sertifikaları, anahtarları, imzalama isteklerini, oluşturmak ve yönetmek için OpenSSL
tarafından sağlanan temel bir komut satırı aracıdır.
req X.509 sertifika imzalama isteği (CSR) yönetimi için bir alt komutunu belirtir.
-x509 Bir sertifika isteği üreten, kendinden imzalı sertifika dosyası yapmak istediğimizi belirtir.
-days Sertifaka için gün cinsinden bir geçerlilik süresi belirtir.
-newkey
rsa:2048
Şifreleme için bit uzunluğunu belirtir. Sertifika isteği ve aynı zamanda yeni bir özel
anahtar oluşturur. 2048 bit uzunluğunda bir RSA anahtarı oluşturmak için kullanılır.
-keyout Private key dosyasının nereye kaydedileceğini belirtmek için kullanılan bir parametredir.
-out Üretilen sertifikanın çıktı dosyasının belirtilmesi için kullanılan bir parametredir.
Şimdi komutumuzu terminale yazabiliriz.
Openssl komutunu girdikten sonra sertifika ile ilgili birkaç bilgi girmemizi istiyor. Adım adım oradaki
bilgileri kendi bilgileriniz ile dolduruyorsunuz. Ben örnek olması açısından yukarıdaki gibi çeşitli
bilgiler yazdım.
www.tolgaakkapulu.com 18 Ekim 2016
Country Name (2 letter code) [AU] : Ülke Kodunuz
State or Province Name (full name) [Some-State] : Şehriniz
Locality Name (eg, city) [] : İlçeniz
Organization Name (eg, company) [Internet Widgits Pty Ltd] : Şirketiniz
Organizational Unit Name (eg, section) [] : Birim, Bölüm
Common Name (e.g. server FQDN or YOUR name) [] : domaininiz.com
Email Address [] : [email protected]
Bu oluşturduğumuz anahtar ve sertifika, /etc/apache2/ssl dizinine yerleştirilir.
Bu bilgileri kendinize göre doldurduktan sonra Apache web sunucumuzu da yapılandırmamız
gerekiyor. Bu işlemi yaparken /etc/apache2/sites-available/default-ssl.conf dosyasındaki default
bilgileri değiştireceğiz. İlk başta default bilgileri görelim.
Terminal üzerinde görüntülüyebilmek için root olarak "sudo vim /etc/apache2/sites-
available/default-ssl.conf" dosyasını açıyoruz.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
www.tolgaakkapulu.com 18 Ekim 2016
Kırmızı olarak işaretlediğim kısımları aşağıdaki gibi düzenliyoruz.
Vim editöründe ekleme moduna geçebilmek için insert moduna "i" tuşuna tıklayarak geçiyoruz.
Eklemeleri yaptıktan sonra kaydedip çıkmak için Esc tuşuna basıyoruz ve :wq yazıyoruz.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName domaininiz.com
ServerAlias www.domaininiz.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
www.tolgaakkapulu.com 18 Ekim 2016
SSL sanal hostunu aktif edebilmek için terminale "sudo a2ensite default-ssl.conf" yazıyoruz.
Ve ardından Apache web sunucumuzu "sudo service apache2 restart" ile yeniden başlatıyoruz.
Bütün ayarlarımızı böylelikle tamamlamış oluyoruz. Yaptığımız tüm işlemlerin sorunsuz bir şekilde
yapılıp yapılmadığını öğrenebilmek için tarayıcımızı açıyoruz ve https://192.168.11.164 adresine
giriyoruz.
www.tolgaakkapulu.com 18 Ekim 2016
Yukarıda da görüldüğü gibi işlemlerimizi sorunsuz bir şekilde tamamlamış oluyoruz. Sertifikamızı
Sertifika Otoritesi tarafından doğrulatmadığımız için yukarıdaki gibi bir uyarı ile karşılaştık. Bu uyarıyı
geçmek ve sertifika ayrıntılarını görebilmek için aşağıdaki işlemleri uyguluyoruz. (Gelişmiş>Ayrıcalık
Tanı>Güvenlik Ayrıcalığını Doğrula)
Ayrıcalık tanıdıktan sonra sertifika bilgilerini görüntülemek için sol üst köşedeki, adres çubuğunun
başındaki https simgesine tıklayarak sertifika hakkında ayrıntılı bilgiyi görüntüleyebiliriz.
www.tolgaakkapulu.com 18 Ekim 2016
Yukarıdaki bilgiler içerisinde o sayfanın biz açmadan önce şifrelendiği bilgisini bulabiliriz. Buna ek
olarak cipher suite bilgisi de ayrıca görüntülenmektedir. Daha ayrıntılı bilgiler görebilmek için
Sertifikayı Göster'e tıklayabiliriz.
www.tolgaakkapulu.com 18 Ekim 2016
www.tolgaakkapulu.com 18 Ekim 2016
Böylelikle OpenSSL yardımıyla SSL oluşturmuş olduk.
Kaynak : https://tr.wikipedia.org/wiki/OpenSSL
Kaynak : https://tr.wikipedia.org/wiki/Transport_Layer_Security Tolga AKKAPULU
www.tolgaakkapulu.com
www.blog.tolgaakkapulu.com
https://tr.linkedin.com/in/tolga-akkapulu-518054105