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ı 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, ancak diğer versiyonlarda da aynı yöntemi kullanabilirsiniz.
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.
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.