NGINX Web Sunucusunda SSL Mükemmel İletim Gizliliğinin Uygulanması
Bu NASIL YAPILIR, Debian ve Ubuntu sistemlerinde NGINX web sunucusuyla Mükemmel İletim Gizliliği uygulama sürecini açıklamaktadır. Süreç kolaylıkla diğer GNU/Linux sistemlerine uyarlanabilir.
Kısacası, Mükemmel İletme Gizliliği şunları sağlar: "... bir mesajın tehlikeye atılması diğerlerinin de tehlikeye atılmasına yol açamaz ve aynı zamanda birden fazla mesajın tehlikeye atılmasına yol açabilecek tek bir gizli değerin bulunmamasını." Daha fazla bilgi için http://en.wikipedia.org/wiki/Forward_secrecy#Perfect_forward_secrecy adresine bakın.
OpenSSL'deki Heartbleed güvenlik açığı 2014'ün başlarında ortaya çıktığında, PFS'nin ciddi kapasitede SSL/TLS kullanan herhangi bir sistem için bir zorunluluk olduğu giderek daha açık hale geldi.
Sonuçlarınızı benimkiyle karşılaştırmak isterseniz referans uygulamam https://www.ssllabs.com/ssltest/analyze.html?d=indietorrent.org adresinde ve gönderilen SSL sertifika zinciri ve NGINX başlıklarında test edilebilir. https://indietorrent.org adresinden incelenebilir.
Daha fazla uzatmadan NGINX'i PFS'yi uygulayacak şekilde yapılandıralım.
NGINX'in konfigürasyon dizinine geçelim:
cd /etc/nginx/Yeterince güçlü Diffie-Hellman parametrelerini üretmemiz gerekiyor. Bazıları 4096 bitin aşırı olduğunu ve sistemin CPU'su üzerinde aşırı bir yüke neden olacağını savunuyor, ancak modern bilgi işlem gücüyle bu, değerli bir uzlaşma gibi görünüyor. Daha fazla bilgi için aşağıdaki Referanslar bölümüne bakın.
openssl dhparam -out dh4096.pem 4096Eldeki göreve özel olan bu yapılandırma dosyasının bir içerme dosyasında bölümlere ayrılmış olması kullanışlıdır; bu, PFS'nin çok sayıda sistemde uygulanmasını kolaylaştırır.
vi /etc/nginx/perfect-forward-secrecy.confAşağıdakileri yukarıdaki dosyaya yapıştırın:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !MEDIUM";
ssl_dhparam dh4096.pem;
Aşağıdaki satırı NGINX'in birincil yapılandırma dosyasına (varsayılan olarak /etc/nginx/nginx.conf) altına (ve içine) ekleyerek NGINX yapılandırmasını yukarıdaki dosyayı içerecek şekilde değiştirin. http { bloğu:
# See: https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy
# This MUST come AFTER the lines that includes .../sites-enabled/*, otherwise SSLv3 support may be re-enabled accidentally.
include perfect-forward-secrecy.conf;
Değişikliklerin etkili olması için NGINX'i yeniden başlatın:
service nginx restarthttps://www.ssllabs.com/ssltest/analyze.html adresindeki testte Oturum sürdürme (önbelleğe alma) Hayır (atanan ancak kabul edilmeyen kimlikler) kırmızı renkte görüntüleniyorsa ve sunucu SNI'yi uyguluyorsa, aşağıdakileri üst seviyeye ekleyin http { bloğu (yani önceki eklemeleri yaptığımız yerin hemen altındaki nginx.conf'a ekleyin):
# See: http://forum.nginx.org/read.php?2,152294,152401#msg-152401
ssl_session_cache shared:SSL:10m;
Değişikliklerin etkili olması için tekrar NGINX'i yeniden başlatın:
service nginx restartYukarıdaki test artık bu sorunu bildirmemelidir (sorun genel test puanını düşürmese bile).
Daha İleriye Götürmek: Uzun Süreli HTTP Sıkı Aktarım Güvenliğini (HSTS) Uygulamak
Bu kolay bir işlemdir ve aşağıdaki koşullar sağlandığı takdirde yapmaya değerdir:
- Bu başlığın ayarlandığı herhangi bir ana bilgisayarın (yani söz konusu web sitesindeki her sayfanın) tüm kaynakları için SSL'yi zorlamak istiyorsunuz.
- Bu başlığın ayarlandığı herhangi bir ana bilgisayardan talep edilen herhangi bir kaynak için "Etki Alanı Adı Uyuşmazlığı" vb. gibi SSL uyarılarını kabul etme ve yok sayma olanağına sahip olamama durumuyla yaşayabilirsiniz. HSTS'nin doğası, ilgili uyarı ve hata koşullarıdır. SSL sertifikasına geçersiz kılınamaz.
Bu başlığın ayarlanmasının, başlığı desteklemeyen tarayıcılarda istenmeyen sonuçlara yol açıp açmayacağı konusunda bilgi almak için İnternet'i araştırdım ve kısa sürede ortaya çıktı. Ancak bu uygulamayı örneğin Internet Explorer 6'da test ederek endişelerimi gidermeyi başardım ve HSTS'nin uygulanmadığı tarayıcılar başlığı görmezden geliyor. Mükemmel!
Aşağıdaki satırları /etc/nginx/perfect-forward-secrecy.conf dosyasının altına eklemeniz ve değişiklikleri kaydetmeniz yeterlidir:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
# This will prevent certain click-jacking attacks, but will prevent
# other sites from framing your site, so delete or modify as necessary!
add_header X-Frame-Options SAMEORIGIN;
NGINX'i bu belirli değişiklikleri almaya zorlamak için yeniden yükleme (yeniden başlatmak yerine) yeterli olacaktır:
service nginx reloadUygulamanızı https://www.ssllabs.com/ssltest/analyze.html adresinde test ederek HSTS'nin amaçlandığı gibi çalıştığını doğrulamak mümkündür. HSTS doğru şekilde uygulanırsa, puanınızın hemen altında "Bu sunucu uzun süreli HTTP Sıkı Aktarım Güvenliğini destekliyor. Derece A+ olarak ayarlandı" ifadesini belirten yeşil bir kutu görmelisiniz.
Tebrikler!
Artık İnternet'teki en güvenli SSL/TLS uygulamalarından birine sahipsiniz.
Referanslar:
- https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy
Telif Hakkı © 2014 Ben Johnson