OpenSSL ile SSL kurulumu

12
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:

Transcript of OpenSSL ile SSL kurulumu

Page 1: OpenSSL ile SSL kurulumu

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:

Page 2: OpenSSL ile SSL kurulumu

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.

Page 3: OpenSSL ile SSL kurulumu

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.

Page 4: OpenSSL ile SSL kurulumu

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.

Page 5: OpenSSL ile SSL kurulumu

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.

Page 6: OpenSSL ile SSL kurulumu

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>

Page 7: OpenSSL ile SSL kurulumu

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>

Page 8: OpenSSL ile SSL kurulumu

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.

Page 9: OpenSSL ile SSL kurulumu

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.

Page 10: OpenSSL ile SSL kurulumu

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.

Page 11: OpenSSL ile SSL kurulumu

www.tolgaakkapulu.com 18 Ekim 2016

Page 12: OpenSSL ile SSL kurulumu

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