Let's Encrypt ile ücretsiz SSL

Let's Encrypt Nedir?

Let's Encrypt ISRG tarafından geliştirilen ve Linux Foundation tarafından desteklenen bir açık sertifika otoritesi. Tüm amaç kamu yararı için ücretsiz, otomatize ve açık bir sertifika doğrulama sistemi. Tam olarak böyle açıklanabilir sanırım :)

Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit. Let’s Encrypt is a service provided by the Internet Security Research Group (ISRG). https://letsencrypt.org/about/

Let's Encrypt'i neden kullanmalıyım?

  • Ücretsiz
  • 2 dakikalık kurulumdan sonra her şey otomatik
  • Güvenli
  • Transparan ve Açık

Uyarılar:

  • Ticari projelerde kullanılmaması gerektiği konuşuluyor, çünkü aktif bir kimlik doğrulama mekanizması yok.
  • Wildcard desteği yok, her alt alan adı için ayrı çalışmanız gerekiyor.
  • 90 günlük sertifika. ( Aslında bu kök sertifikalarını çaldıran firmalara karşı bir avantaj gibi duruyor. https://letsencrypt.org/2015/11/09/why-90-days.html)

Temel Kurulum

Son zamanlarda Nginx popülerliğini koruduğu için örneği Nginx üzerinden vereceğim. Ancak Apache vb. diğer uygulama sunucuları için de aynı aşamalar geçerli.

Let's Encrypt Adımları

cd /opt
git clone https://github.com/certbot/certbot

Ayar Dosyaları

Alan adlarına ait ayarların tutulmasıyla birlikte aslında işler kolaylaşıyor. Daha sonra yenilemek için aynı dosyaları kullanabiliyorsunuz.

mkdir -p /opt/letsencrypt-configs
touch /opt/letsencrypt-configs/halid.org.ini

Örnek Ayar Dosyası

Aşağıdaki ayarları ini dosyası içine kaydediyoruz.

authenticator = standalone
domains = halid.org
email = halid@halid.org
rsa-key-size = 4096

Bu işlemden sonra 80 ve 443 portunda çalışan web sunucunuz(Nginx, Apache vb.) varsa durdurmanız gerekiyor. Bu işlem Let's Encrypt sunucularından sizin alan adınıza doğrulama için gerekiyor.

/opt/certbot/letsencrypt-auto certonly -c /opt/letsencrypt-config/halid.org.ini

Bu doğrulama işleminden sonra /etc/letsencrypt dizini altında SSL sertifikaları oluşacaktır.

dev@haritsu:/opt# ls -la /etc/letsencrypt/live/halid.org/
total 8
drwxr-xr-x  2 root root 4096 Dec 17 10:02 .
drwx------ 14 root root 4096 Feb  1 13:32 ..
lrwxrwxrwx  1 root root   33 Dec 17 10:02 cert.pem -> ../../archive/halid.org/cert1.pem
lrwxrwxrwx  1 root root   34 Dec 17 10:02 chain.pem -> ../../archive/halid.org/chain1.pem
lrwxrwxrwx  1 root root   38 Dec 17 10:02 fullchain.pem -> ../../archive/halid.org/fullchain1.pem
lrwxrwxrwx  1 root root   36 Dec 17 10:02 privkey.pem -> ../../archive/halid.org/privkey1.pem

Bu işlemden sonra web sunucunuzu(Apache, Nginx vb.) tekrar başlatabilirsiniz.

Web Sunucusu Ayarları

Oluşturulan sertifikayı web sunucunuza tanıtmanız gerekiyor. Bu işlem oldukça basit. Aşağıda örnek bir Nginx virtualhost tanımı görebilirsiniz.

Aşağıda gördüğünüz virtual host tanımında 80 portuna gelen istekler HTTP 301 ile 443 portuna redirect edilmiş durumda. İlgili dosyayı kendi ihtiyacınıza göre düzenleyebilirsiniz.

server {
	listen 80;
	server_name halid.org;
	return 301 https://$host$request_uri;
}
server {
	server_name halid.org;
	listen 443 ssl;
	ssl_certificate /etc/letsencrypt/live/halid.org/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/halid.org/privkey.pem;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;
	ssl_dhparam /etc/ssl/certs/dhparam.pem;
	ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
	ssl_session_timeout 1d;
	ssl_stapling on;
	ssl_stapling_verify on;
	add_header Strict-Transport-Security max-age=15768000;

	root /var/www/halid.org;
	index index.php;
}

Not: ssl_dhparam ve ssl_ciphers parametresi ekstra SSL güvenliği sağlamak için eklenmiştir. ssl_dhparam satırında yer alan dhparam.pem dosyasını üretmek için;

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

komutunu çalıştırmanız yeterlidir.

Sertifika Yenileme

Yazının başında dediğimiz gibi Let's Encrypt 3 aylık sertifika sağlıyor. 3 ayda bir sertifikayı yenilemeniz gerekiyor. Yenileme işlemini 3 ayda bir yapmak ve takip etmek yerine ayda bir kontrolünü sağlamak daha mantıklı olabilir. Aşağıdaki komutu Crontab'a eklerseniz aylık kontrolü sağlanacaktır.

0 0 1 * * /opt/letsencrypt/letsencrypt-auto renew >> /var/log/letsencrypt-renew.log

Keyifli günler,

Halid Altuner

View Comments
Navigation