Web Sitesine Let’s Encrypt ile Ücretsiz SSL Sertifikası Kurulumu
Yazan: Ali Kasımoğlu_
03 Nisan 2021 15:32

2021 yılı verilerine göre internet üzerindeki web sitelerinin sayısı 1,7 milyarı aşmış durumda ve her gün bu sayıya ortalama 575 bin web sitesi daha ekleniyor. Gerek kullanıcıların gerek ise arama motorlarının işi her geçen gün daha da zorlaşırken, kaliteli ve güvenli içeriği belirlemenin de önemi gittikçe artıyor. İşte bu kontrol mekanizmalarından biri olan SSL sertifikası web için önemli bir yer ediniyor.

Bu yazımda sizlere web sitesi için Let’s Encrypt ile ücretsiz SSL sertifikası kurulumunu, güncelleme ve diğer ince ayarlarından bahsedeceğim.

SSL sertifikası

SSL Sertifikası Nedir?

SSL (Secure Sockets Layer) kelimelerinin baş harflerinden oluşan, Türkçemize (Güvenli Yuva Katmanı) olarak çevrilen, web sitesine ait alan adının doğruluğunu kontrol eden ve sunucu ve istemci (kullanıcı) arasındaki veri iletişimini şifreli kanal üzerinden yaparak güvenli bir şekilde iletilmesini sağlayan güvenlik katmanına SSL sertifikası denir.

Django Websitesi için Nginx Sunucuya Let’s Encrypt ile Ücretsiz SSL Sertifikası Kurulumu

Öncelikle SSL sertifikası edinmenin birçok yolu olduğunu söylemeliyim. Ancak bunlardan çoğu ya ücretlidir ya da güvensiz. İşte bu noktada biz geliştiricilerin imdadına yetişen Let’s Encrypt, web sitelerinin ücretsiz olarak SSL sertifikası kullanmasını yaygınlaştırmak amacıyla kuruldu. Gelin hepbirlikte kurulumu nasıl yapacağımız kısma geçelim.

Gerekli olanlar:

1. Nginx sunucu

2. SSH erişimi

Not: Aşağıda anlatılan yöntemler Django web siteleri dışındaki sitelerde de uygulanabilir. Bu yazıdaki işlemler Ubuntu 20.10 üzerinde Nginx sunucu ve Django 3.x sürümü ile uygulanmıştır.

Adım 1 - Certbot Yükleme

Öncelikle Let’s Encrypt’in sunucuda otomatik çalıştırmasına yarayan Certbot yazılımını ve Nginx eklentisini sunucuya yüklüyoruz.

sudo apt install certbot python3-certbot-nginx

Adım 2 - Nginx Ayarları

Nginx sunucuda site ayarlarınızın doğru olduğunu kontrol edelim. /etc/nginx/sites-available/siteadi.com şeklinde bir dosya olmalı.

sudo nano /etc/nginx/sites-available/siteadi.com

Bu dosyanın içinde server_name yazan alan aşağıdaki gibi olmalıdır;

server_name siteadi.com www.siteadi.com;

Eğer bu şekilde ise bir sonraki aşamaya geçebilirsiniz. Eğer değil ise belirtilen şekilde düzenleyin ve şu kodlarla kayıt edin;

sudo nginx -t

Ardından Nginx sunucuyu yeniden başlatın;

sudo systemctl reload nginx

Artık Certbot yazılımı server alan adını doğru şekilde bulabilir ve süresi geldiğinde yenileyebilir.

Adım 3 - Firewall (Güvenlik Duvarı) Ayarları

Eğer ufw güvenlik duvarı kullanıyorsanız ufw güvenlik duvarını HTTPS trafiğine izin verecek şekilde yapılandırmamız gerekiyor.

Eğer ufw aktif değilse aktif etmek için;

sudo ufw allow ssh
 
sudo ufw enable

Onay vermek için "y" yazıp enter a basın, ardından güvenlik duvarına aşağıdaki kuralları ekleyin.

sudo ufw allow 'Nginx Full'
 
sudo ufw delete allow 'Nginx HTTP'

Şimdi ufw durumunu kontrol edelim.

sudo ufw status

Şu şekilde bir çıktı almamız gerekiyor;

Status: active

To                         Action      From
--                         ------      ----
Nginx Full                 ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
Nginx Full (v6)            ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

Adım 4 - SSL Sertifikası Alma

Şimdi aşağıdaki komutla SSL sertifikasını alalım. Certbot bizim için sertifikayı alacak ve Nginx eklentisi ise sunucu ayarlarını temin edecek.

sudo certbot --nginx -d siteadi.com -d www.siteadi.com

Kurulum aşamasında ayarlar için birkaç soruyu cevaplamanız gerekecek.

Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): iletisim@siteadi.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for test.siteadi.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/default

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/default

Kurulum tamamlandıktan sonra Nginx yeni ayarları almak için yeniden başlayacak ve ayarlar yüklenerek certbot işlemin başarılı olduğunu ve sertifikalarınızın nerede depolandığını bildiren bir mesajla kapanacaktır.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://test.siteadi.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=test.siteadi.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/test.siteadi.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/test.siteadi.com/privkey.pem
   Your cert will expire on 2021-06-21. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Bu aşamadan sonra alan adınızı tarayıcıda giriş yaptığınızda adres çubuğunda kilit simgesi belirecek ve artık alan adınız http değil https olarak açılacaktır.

Sertifikayı test etmek isterseniz SSL Labs Server Test sitesini kullanabilirsiniz. Sertifikanızın A kalite notunu aldığını göreceksiniz.

SSL sertifikası testi

Adım 5 - Certbot Otomatik Yenilemeyi Doğrulama

Let’s Encrypt sertifikaları 90 gün sürelidir. Bu süre bitimine bir ay kala Certbot otomatik olarak sertifikayı günceller. Bu güncelleme işleminin sorunsuzca olacağından emin olmak için test yapalım.

Öncelikle Certbot zamanlayıcının durumunu kontrol edelim.

sudo systemctl status certbot.timer

Eğer her şey yolundaysa şu şekilde bir çıktı almalıyız;

● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2021-02-09 21:53:33 UTC; 1 months 22 days ago
    Trigger: Sat 2021-04-03 23:13:55 UTC; 8h left
   Triggers: ● certbot.service

Certbot'un yenileme işlemini manuel olarak yapmak ve test etmek için;

sudo certbot renew --dry-run

Eğer hata mesajı görmediyseniz tüm işlemler ve ayarlar başarılı bir şekilde tamamlanmış demektir.

Adım 6 - Django Ayarları

Son olarak Django'nun settings.py dosyasına aşağıdaki ayarları ekliyoruz.

SECURE_PROXY_SSL_HEADER = (‘HTTP_X_FORWARDED_PROTO’, ‘https’)
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

Tüm aşamalar bittikten sonra nginx ve gunicor'u yeniden başlatıyoruz.

sudo systemctl restart nginx

service gunicorn restart

Tebrikler, sitenize SSL sertifikası kurulumunu başarıyla tamamladınız.

İletişime Geçin_

Benimle iletişime geçmek için adresine e-posta gönderebilirsiniz. Size en kısa sürede geri dönüş yapacağımdan emin olabilirsiniz. Ayrıca dilerseniz kasimoglu.ali Skype kullanıcı adımdan yada linkedin, facebook veya twitter sosyal medya profillerimden bana ulaşabilirsiniz. Gerçekten iletişime geçmek istiyorsanız bunu bir şekilde yapabileceğinize eminim :)