Debian 10'da Nginx Üzerinde Let's Encrypt SSL Kurulumu

Let’s Encrypt, ücretsiz TLS / SSL sertifikaları almak ve yüklemek için basit bir yol sağlayan ve web sunucularında şifreli HTTP(S) sağlayan bir Sertifika Yetkilisidir (CA). Gerekli adımların çoğunu (hepsi değilse de) otomatikleştirmeye çalışan bir yazılım istemcisi olan Certbot’u bizlere sunarak işlemleri kolaylaştırır. Şu anda Let’s Encrypt ile bir sertifika alma ve yükleme işleminin tamamı hem Apache hem de Nginx’te tamamen otomatiktir.

Bu öğreticide, Debian 10’da Nginx için ücretsiz bir SSL sertifikası almak ve sertifikanızı otomatik olarak yenilenecek şekilde ayarlamak için Certbot’u kullanacaksınız.

Bu eğiticide varsayılan blok yerine ayrı bir Nginx sunucu blok dosyası kullanılacaktır. Yaygın hatalardan kaçınmaya yardımcı olduğu ve varsayılan dosyaları yedek yapılandırma olarak koruduğu için, her etki alanı için yeni Nginx sunucu dosyaları oluşturmanızı öneriyoruz.

Ön şartlar

Bu öğreticiyi takip etmek için şunlara ihtiyacınız olacak:

  • root ya da sudo yetkilerine sahip bir kullanıcı ile SSH erişimi
  • Güvenlik duvarı kurulu bir Debian 10 sunucusu (DigitalOcean ve Vultr tavsiyemdir)
  • Tamamen kontrolünüzde olan kayıtlı bir alan adı.
  • Sunucunuzun IP adresini hedefleyen bir A sizinalanadiniz.com kaydı.
  • Sunucunuzun IP adresini hedefleyen bir A www.sizinalanadiniz.com kaydı.
  • Debian 10 Üzerinde Nginx, MariaDB, PHP (LEMP) Kurulumu konusundaki işlemler.
  • Bu eğiticide biz /etc/nginx/sites-available/sizinalanadiniz.com kullanacağız.

Adım 1 - Certbot’u Yükleme

SSL sertifikası almak için Let’s Encrypt’i kullanmanın ilk adımı, Certbot yazılımını sunucunuza yüklemektir.

Unutmayın! Python 3 yani python3-certbot-nginx paket ile çalışmak kurulumumuzun ömrünü uzatacaktır. Çünkü Python 2 Ocak 2020’ye kadar kullanımdan kaldırılacaktır. Bu nedenle kurulumumuzda biz Python 3 kullanacağız. Debian 10 ise şu anda hem Python 2 hem de Python 3’ü desteklemektedir.

python3-certbot-nginx paketini kurmadan önce paket listenizi güncelleyin:

sudo apt update
sudo apt upgrade -y

Sonra, bağımlılıkları yüklemek için python3-certbot-nginx, python3-acme, python3-certbot, python3-mock, python3-openssl, python3-pkg-resources, python3-pyparsing ve python3-zope.interface paketlerini kuralım:

sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface

Son olarak, python3-certbot-nginx paketi yükleyin:

sudo apt install python3-certbot-nginx

Certbot artık kullanıma hazır, ancak Nginx için SSL’yi 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ı Doğrulama

SSL’nin sunucu bloklarını otomatik olarak yapılandırılabilmesi için Certbot’un Nginx yapılandırmanızda doğru bloğu bulabilmesi gerekir. Bunu server_name yani alan adınızla eşleşen bir yönerge arayarak yapar.

Ön koşullarda bahsettiğim “Debian 10 Üzerinde Nginx, MariaDB, PHP (LEMP) Kurulumu” öğreticimi izlediyseniz, bu yönerge için önceden ayarlanmış etki alanınız için bir sunucu /etc/nginx/sites-available/sizinalanadiniz yani server_name bloğunuz zaten olacaktır.

Kontrol etmek için, nano veya favori terminal editörünüzü kullanarak alan adınız için sunucu bloğu dosyanızı açın :

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

Mevcut server_name satırı bulun. Şöyle görünmelidir:

...
server_name sizinalanadiniz.com www.sizinalanadiniz.com;
...

Değer doğru ise, düzenleyicinizden çıkın ve bir sonraki adıma geçin.

Yoksa, eşleşecek şekilde güncelleyin. Ardından dosyayı kaydedin, düzenleyicinizden çıkın ve yapılandırmadaki düzenlemelerinizin söz dizimini doğrulayın:

sudo nginx -t

Bir hata alırsanız, sunucu blok dosyasını tekrar açın ve yazım hataları veya eksik karakterler olup olmadığını kontrol edin. Yapılandırma dosyası söz diziminiz doğru olduğunda, yeni yapılandırmayı yüklemek için Nginx’i yeniden başlatın.

sudo systemctl reload nginx

Certbot’umuz artık doğru server bloğu bulabilir ve bizim yerimize güncelleyebilir.

Sonra Certbot’u çalıştıralım ve sertifikalarımızı getirelim.

Adım 4 - SSL Sertifikası Alma

Certbot, eklentiler aracılığıyla SSL sertifikaları almanın çeşitli yollarını sunar. Nginx eklentisi, gerektiğinde Nginx’in yeniden yapılandırılması ve yapılandırmanın yeniden yüklenmesi ile ilgilenecektir. Bu eklentiyi kullanmak için aşağıdakileri yazın:

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

Bu komut certbot ile --nginx kullanarak, -d etki alan adlarına sertifika almak anlamına gelir.

İlk kez çalıştırıyorsanız certbot, bir e-posta adresi girmenizi;

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): merhaba@muhyal.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Hizmet şartlarını kabul etmenizi (A yanıtını verebilirsiniz.).;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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

Posta aboneliği için onayınızı isteyecektir (Y yanıtını verebilirsiniz.).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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

Bunu yaptıktan sonra certbot Let’s Encrypt sunucusuyla iletişim kuracak, ardından sertifika istediğiniz etki alanının size aitliğini doğrulamak için bir sorgulama başlatacaktır.

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

Bu işlem başarılı olursa, certbot HTTP(S) 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): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/sizinalanadiniz.com
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/sizinalanadiniz.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

İkinci seçenek yani tüm trafiği güvenli HTTP(S) üzerine yönlendirmek için 2 seçiminizi yapın ve ardından ENTER düğmesine basın. Yapılandırmanız güncellenecek ve yeni ayarları uygulamak için Nginx yeniden başlatılacaktır. certbot size işlemin başarılı olduğunu ve sertifikalarınızın nerede saklandığını bildiren bir mesaj gösterecektir.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://sizinalanadiniz.com and
https://www.sizinalanadiniz.com

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

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/sizinalanadiniz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/sizinalanadiniz.com/privkey.pem
   Your cert will expire on 2020-07-05. 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"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

Web sitenizi https:// kullanarak yeniden yüklemeyi deneyin ve tarayıcınızın güvenlik göstergesine dikkat edin. Sitenin, genellikle yeşil bir kilit simgesiyle düzgün şekilde sabitlendiğini görüntülenmelidir. Alan adınızı SSL Labs Server Testini kullanarak test ederseniz, A notunu alacaktır.

Son olarak aşağıdan otomatik SSL sertifikası yenileme sürecini test ederek bitirelim.

5. Adım - Certbot Otomatik Sertifika Yenilemeyi Doğrulama

Let’s Encrypt sertifikaları yalnızca doksan gün geçerlidir. Bu, kullanıcıları sertifika yenileme işlemlerini otomatikleştirmeye teşvik etmektedir. Bizim için bu işlemi /etc/cron.d yapacaktır. Bu komut dosyası günde iki kez çalışır ve süresinin dolmasından itibaren otuz gün içinde sertifikaları otomatik olarak yeniler.

Yenileme işlemini test etmek için aşağıdaki komutu girebilirsiniz;

sudo certbot renew --dry-run

Hata görmüyorsanız, hazırsınız demektir. Gerektiğinde Certbot, sertifikalarınızı yenileyecek ve değişiklikleri uygulamak için Nginx’i yeniden başlatacaktır. 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 dolduğunda sizi uyaracaktır.

Sonuç

Bu öğreticide, Let’s Encrypt istemcisi olan certbot yüklediniz, alan adınız için SSL sertifikaları oluşturdunuz, Nginx’i bu sertifikaları kullanacak şekilde yapılandırdınız ve otomatik sertifika yenilemeyi ayarladınız.

Certbot’u kullanma hakkında başka sorularınız varsa, resmi belgeler bakmak için iyi bir yerdir.

Tabi herhangi bir sorunla karşı karşıyaysanız, bu makaleyi yanıtlamaktan da asla çekinmeyin :slight_smile: :point_down: