Certbot
, Let’s Encrypt SSL sertifikalarını imzalamak ve yenileme görevlerini otomatikleştiren ve bunları kullanmak için web sunucularını yapılandıran kullanımı aşırı kolay bir araçtır.
EPEL depolarından kurulum yapılabilir
sudo yum install certbot
Dh (Diffie-Hellman) Oluşturmak
Diffie – Hellman anahtar değişimi (DH), güvenli olmayan bir iletişim kanalı üzerinden kriptografik anahtarların güvenli bir şekilde alışverişi için kullanılan bir yöntemdir.
2048 bitlik Dh’mizi oluşturalım
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
İsterseniz 4096 bit uzunluğunda oluşturabilirsiniz, ancak unutmayınız ki sunucu gücünüze göre bu işlem yaklaşık 30 dakika kadar sürebilir.
Let’s Encrypt SSL’nın Edinilmesi
ACME için gerekli olan dizini oluşturuyoruz.
sudo -u nginx sh -c "mkdir -p /var/www/_letsencrypt"
Web sunucumuza gereken tanımlamayı /etc/nginx/conf.d/acme.conf
içerisine yapıyoruz.
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/www/_letsencrypt/;
default_type "text/plain";
try_files $uri =404;
}
Web sunucumuzu SSL için yapılandıracağız kullanacağı kriptografik yöntemleri /etc/nginx/conf.d/ssl.conf
içerisine yapılandırıyoruz.
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
SSL sertifikamızı oluşturmak için gerekli olan certbot
komutunu verelim.
certbot certonly --webroot -d mertcangokgoz.com -d www.mertcangokgoz.com --email [email protected] -w /var/www/_letsencrypt -n --agree-tos --force-renewal
Sertifikamız onaylandıktan sonra sunucumuzda hem 443 portunu hemde gereken ayarlamaları yapmak için aşağıdaki yapılandırmayı /etc/nginx/sites-enabled/mertcangokgoz.com.conf
içerisine uyguluyoruz.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mertcangokgoz.com;
# SSL
ssl_certificate /etc/letsencrypt/live/mertcangokgoz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mertcangokgoz.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/mertcangokgoz.com/fullchain.pem;
# index.php
index index.php;
# index.php fallback
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# handle .php
location ~ \\.php$ {
include php_fastcgi.conf;
}
}
# subdomains redirect
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name *.mertcangokgoz.com;
# SSL
ssl_certificate /etc/letsencrypt/live/mertcangokgoz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mertcangokgoz.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/mertcangokgoz.com/fullchain.pem;
return 301 https://mertcangokgoz.com$request_uri;
}
# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name .mertcangokgoz.com;
location / {
return 301 https://mertcangokgoz.com$request_uri;
}
}
Yukarıdaki yapılandırmada HTTPS’yi zorluyor ve www’i www olmayan bir versiyona yönlendiriyoruz.
Ayarların geçerli olması için servisi yeniden dürtüyoruz.
sudo systemctl reload nginx