Ubuntu’da Nginx için Let’s Encrypt ile Ücretsiz SSL
Açıklama:
Let’s Encrypt, ücretsiz SSL / TLS sertifikalarını edinmenin ve yüklemenin kolay bir yolunu sağlayan ve böylece web sunucularında şifreli HTTPS’yi etkinleştiren bir Sertifika Otoritesidir (CA). Gerekli adımların çoğunu (hepsi değilse de) otomatikleştirmeye çalışan bir yazılım istemcisi olan Certbot, süreci basitleştirir. Şu anda, bir sertifika alma ve yükleme sürecinin tamamı hem Apache hem de Nginx’te tamamen otomatiktir.
Bu yazıda, Certbot’u Ubuntu 20.04’te ücretsiz bir SSL sertifikası almak için kullanacağız ve sertifikamızı otomatik olarak yenilenecek şekilde ayarlayacağız.
Varsayılan dosya yerine ayrı bir Nginx sunucusu yapılandırma dosyası kullanılacaktır. Her etki alanı için yeni Nginx sunucusu blok dosyaları oluşturmanızı öneririm çünkü yaygın hatalardan kaçınmaya yardımcı olur ve varsayılan dosyaları bir yedek yapılandırma dosyası olarak korur.
Önkoşullar:
Sudo etkin ve root olmayan kullanıcı ve bir güvenlik duvarı dahil olmak üzere Ubuntu 20.04 sunucusu kuruldu.
Kayıtlı bir alan adı. Bu eğitim boyunca ornek.com’u kullanacağız. Namecheap’ten bir alan adı satın alabilir, Freenom ile ücretsiz bir alan adı edinebilir veya tercih ettiğiniz alan adı kayıt şirketini kullanabilirsiniz.
Aşağıdaki DNS kayıtlarının her ikisi de sunucumuz için ayarlandı.
ornek.com’un sunucunuzun genel IP adresini işaret ettiği bir A kaydı.
Sunucunuzun genel IP adresini gösteren www.ornek.com’un bulunduğu bir A kaydı.
Etki alanınız için bir sunucu bloğunuz olduğundan emin olun. Bu eğitici örnek olarak /etc/nginx/sites-available/ornek.com’u kullanacaktır.
Yapılandırma:
Adım 1 – Certbot’u Kurmak
Bir SSL sertifikası almak için Let’s Encrypt’i kullanmanın ilk adımı, Certbot yazılımını sunucunuza yüklemektir.
Apt ile Certbot’u ve Nginx eklentisini yüklüyoruz:
sudo apt install certbot python3-certbot-nginx
Certbot artık kullanıma hazır, ancak Nginx SSL’yi otomatik olarak yapılandırması için, Nginx’in bazı yapılandırmalarını doğrulamamız gerekiyor.
Adım 2 – Nginx’in Yapılandırmasını Onaylama
Certbot’un SSL’i otomatik olarak yapılandırabilmesi için Nginx, yapılandırmanızda doğru sunucu bloğunu bulabilmesi gerekir. Bunu özellikle, sertifika talep ettiğiniz etki alanıyla eşleşen bir server_name yönergesini arayarak yapar.
Nginx kurulum öğreticisindeki sunucu bloğu kurulum adımını takip ettiyseniz, /etc/nginx/sites-available/ornek.com adresinde alanınız için server_name yönergesi zaten uygun şekilde ayarlanmış bir sunucu bloğunuz olmalıdır.
Kontrol etmek için nano’yu veya en başka bir metin düzenleyiciyi kullanarak alanınızın yapılandırma dosyasını açıyoruz:
sudo nano /etc/nginx/sites-available/ornek.com
Mevcut server_name satırını bulun. Şöyle görünmeli:
... server_name ornek.com www.ornek.com; ...
İlgili girdi varsa, düzenleyicinizden çıkın ve bir sonraki adıma geçin. Eğer yoksa, eşleşecek şekilde güncelleyin. Ardından dosyayı kaydedin, düzenleyicinizden çıkın ve yapılandırma düzenlemelerinizin sözdizimini doğrulayın:
sudo nginx -t
Bir hata alırsanız, sunucu blok dosyasını (/etc/nginx/sites-available/ornek.com) yeniden açın ve herhangi bir yazım hatası veya eksik karakter olup olmadığını kontrol edin. Yapılandırma dosyanızın söz dizimi doğru olduğunda, yeni yapılandırmayı yüklemek için Nginx’i yeniden yükleyin:
sudo systemctl reload nginx
Certbot artık doğru sunucu bloğunu bulabilir ve otomatik olarak güncelleyebilir.
Ardından, HTTPS trafiğine izin vermek için güvenlik duvarını güncelleyelim.
Adım 3 – Güvenlik Duvarı Üzerinden HTTPS’e İzin Verme
Önkoşul kısmında önerildiği gibi ufw güvenlik duvarını etkinleştirdiyseniz, ayarları HTTPS trafiğine izin verecek şekilde ayarlamanız gerekir. Zaten Nginx kurulumdan sonra ufw’ da birkaç kural kayıt etmektedir.
Geçerli yapılandırma ayarını aşağıdaki komut ile görebilirsiniz:
sudo ufw status
Muhtemelen şöyle bir çıktı ile karşılaşıyor olacağız, yani web sunucusuna yalnızca HTTP trafiğine izin verilmiştir:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
HTTPS trafiğine izin vermek için, Nginx Full profiline izin verin ve yedek Nginx HTTP profili kuralını siliyoruz:
sudo ufw allow 'Nginx Full' sudo ufw delete allow 'Nginx HTTP'
Son durum aşağıdaki gibi olmalıdır:
sudo ufw status
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
Şimdi, Certbot’u çalıştırıp sertifikalarımızı alalım.
Adım 4 – Bir SSL Sertifikası Alma
Certbot, eklentiler aracılığıyla SSL sertifikaları almak için çeşitli yollar sunar. Nginx eklentisi, Nginx’i yeniden yapılandırmakla ve gerektiğinde yapılandırmayı yeniden yüklemekle ilgilenecektir. Bu eklentiyi kullanmak için aşağıdakileri yazın:
sudo certbot --nginx -d ornek.com -d www.ornek.com
Bu, sertifikanın geçerli olmasını istediğimiz alan adlarını -d kullanarak –nginx eklentisiyle birlikte certbot’u çalıştırır.
Certbot’u ilk kez çalıştırıyorsanız, bir e-posta adresi girmeniz ve hizmet şartlarını kabul etmeniz istenir. Bunu yaptıktan sonra, certbot Let’s Encrypt sunucusuyla iletişim kuracak ve ardından sertifika talep ettiğiniz alanı kontrol ettiğinizi doğrulamak için bir sorgulama gerçekleştirecektir.
Başarılı olursa, certbot HTTPS ayarlarınızı nasıl yapılandırmak istediğinizi soracaktır.
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):
Seçimimizi yaptıktan sonra ENTER’a basın. Yapılandırma güncellenecek ve Nginx yeni ayarları almak için yeniden yüklenecektir. certbot, işlemin başarılı olduğunu ve sertifikalarınızın nerede depolandığını bildiren bir mesajla sonlandıracaktır:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/ornek.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/ornek.com/privkey.pem Your cert will expire on 2020-08-18. 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
Sertifikalarınız indirilir, kurulur ve yüklenir. Web sitenizi https: // kullanarak yeniden yüklemeyi deneyin ve tarayıcınızın güvenlik göstergesine dikkat edin. Sitenin genellikle bir kilit simgesiyle uygun şekilde güvenli hale getirildiğini göstermelidir.
Yenileme sürecini test ederek bitirelim.
Adım 5 – Certbot Otomatik Yenilemesini Doğrulama
Let’s Encrypt’in sertifikaları yalnızca doksan gün geçerlidir. Bu, kullanıcıları sertifika yenileme işlemlerini otomatikleştirmeye teşvik etmek içindir. Kurduğumuz certbot paketi, günde iki kez çalışacak ve otuz gün içinde herhangi bir sertifikayı otomatik olarak yenileyecek bir sistem zamanlayıcı ekleyerek bunu bizim için halleder.
Zamanlayıcının durumunu systemctl ile sorgulayabilirsiniz:
sudo systemctl durumu certbot.timer
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service
Yenileme sürecini test etmek için, certbot ile prova yapabilirsiniz:
sudo certbot renew --dry-run
Hiçbir hata görmüyorsanız, hazırsınız demektir. Gerektiğinde, Certbot sertifikalarınızı yenileyecek ve değişiklikleri almak için Nginx’i yeniden yükleyecektir. Otomatik yenileme işlemi başarısız olursa, Let’s Encrypt belirttiğiniz e-postaya bir mesaj göndererek sertifikanızın süresi dolmak üzereyken sizi uyarır.