Salı, Aralık 24, 2024

CentOS 7’de Let’s Encrypt ile NGINX Nasıl Yapılandırılır?

yüksek çözünürlüklü nginx logosu

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