Linux Sunucularda Nginx Zayıf Şifreleme Takımları Nasıl Kapatılır
Önem derecesiYüksek
enRead this article in EnglishÇoğu sistemde varsayılan paket önyüklemeleri zafiyetler içerebilmektedir. Bu çoğunlukla geriye dönük uyumluluğu sağlamak için üreticiler tarafından tercih edilmektedir. Apache ve IIS’de olduğu gibi Nginx’te de standart kurulum üzerine SSL yapılandırması olduğu gibi bırakılırsa, yarardan çok zarar getirecektir.
Not: Eski tarayıcı ve mobil iş istasyonları yeni geliştirilmiş olan TLS 1.2 gibi şifreleme takımlarını desteklemeyebilir.
Web tarayıcıları ile sunucu arasında SSL/TLS iletişimi kurulduğu zaman öncelikli olarak sunucu tarafı hangi şifreleme takımları ile iletişim kurabileceğini tarayıcıya iletir. Modern web tarayıcıları, eğer yapılarında bir değişiklik yapılmadıysa, sunucunun önerdiği en güncel şifreleme takımlarını kullanmayı deneyecektir. Bir saldırgan ise sunucunun önermiş olduğu tüm şifreleme takımlarını listeleyebilir ve bunların arasında açığı olduğu bilinen şifreleme takımları ile iletişim kurmaya çalışır. Bu şifreleme takımları arasında kesinlikle açıkları olduğu bilinen SSLv3 ve TLSv1.0 da bulunmaktadır.
Yapılandırma
Yapılandırma dosyanız Virtual Host direktifi içeriyorsa, Virtual Host yapılandırması altında, içermiyorsa nginx.conf dosyasında aşağıdaki değişiklikleri yapınız. Standart yapılandırmanın içeriğine aşağıdakileri eklemeniz gerekecektir:
ssl_session_timeout 1d;
ssl_session_cache shared:ONLAYER:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
ssl_stapling on;
ssl_stapling_verify on;
ssl_session_timeout: ssl oturum yeniden kullanım süresi, 1 gün. ssl_session_cache shared: Tüm proseslerin paylaştığı bir ön bellek mekanizmasıdır, yerleşik olan bellek mekanizması (builtin) hafıza parçalanması oluşturduğu için önerilmemektedir. ssl_session_tickets: SSL oturumunun yeniden başlatılmasını engeller. ssl_protocols: SSL şifreleme protokolleri, sadece TLSv1.2’ ve TLS1.3’e izin verilmiştir. ssl_ciphers: Tarayıcıya sunulan şifreleme takımları. Bkz: https://ssl-config.mozilla.org/ add_header Strict-Transport-Security “max-age=63072000” always: Tarayıcıya güvenli iletişim kurarak bu site ile iletişime geçmesi direktifini verir ve bu bilgiyi yaklaşık 2 yıl aklında tutması söylenir. ssl_stapling: Hem güvenliği hem de performansı artırmak için kullanır. Bu ayar aktive edildiğinde tarayıcının CA otoritesine sertifika durumunu sormasına gerek kalmaz.
TLSv1.3 RedHat Enterprise Linux 8 ya da benzeri işletim sistemi gerektirebilir. OpenSSL’in TLSv1.3’ü destekleyen sürümü 7 sürümünde gelmemektedir.
Yapılandırma dosyasının tamamı aşağıdaki gibi olmalıdır, eğer nginx reverse proxy modunda çalıştırılıyorsa ayrıca Apache yapılandırma makalemizi de incelemeninizi tavsiye ederiz. Aşağıdaki örnek standart kurulum yapılandırma üzerine derlenmiştir, eğer nginx dışında bir kullanıcı kullanıyorsanız değiştirmeniz gerekir. Sertifikaların /etc/nginx/SSL/ dizininde olduğu varsayılarak:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
# redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /etc/nginx/SSL/bundle.crt;
ssl_certificate_key /etc/nginx/SSL/csr/server.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_dhparam /etc/nginx/SSL/dhparam.pem;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
ssl_stapling on;
ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /etc/nginx/SSL/USERTrustRSAAddTrustCA.crt;
# replace with the IP address of your resolver
resolver 127.0.0.1;
}
}
Eğer Nginx’i Apache için reverse proxy olarak kullanıyorsanız, yapılandırmanız şuna benzer olmalıdır:
server
{
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nginxdoc.rackdc.com;
ssl_certificate /etc/nginx/SSL/bundle.crt;
ssl_certificate_key /etc/nginx/SSL/server.key;
ssl_session_timeout 1d;
ssl_session_cache shared:ONLAYER:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_dhparam /etc/nginx/SSL/dhparam.pem;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/pki/tls/SectigoRSADomainValidationSecureServerCA.crt;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
# replace with the IP address of your resolver
resolver 127.0.0.1;
}
Yapılandırmayı kaydettikten sonra nginx sunucusunu yeniden başlatın
systemctl restart nginx
Onlayer üzerinden sisteminizi tekrar kontrol ettiğinizde PCI Uyumluluğun olduğunu göreceksiniz:

Yasal Uyarı
Copyright (c) 2019 – 2026 ONLAYER Bilişim Teknolojileri A.Ş.
Bu sayfadaki içeriğin kullanımı sadece bu sayfaya link ile atıf yapılarak mümkündür. Yazılı izin olmadan değiştirilemez ve alıntı yapılamaz.
Kullanım Uyarısı: Burada belirtilen direktifler olduğu gibidir ve uygulanması sonucunda oluşabilecek servis kesintileri ve veri kaybından ONLAYER sorumlu değildir. Sistemlerin daha iyi çalışabileceği ya da daha güvenli olacağına dair hiç bir garanti verilmemektedir. Ne firma ne de yazar kullanımdan dolayı hiçbir sorumluluk kabul etmemektedir.