Giriş

Let's Encrypt
Let’s Encrypt

Let’s Encrypt, ücretsiz TLS/SSL sertifikalarının alınmasını ve yüklenmesini kolaylaştıran ve böylece web sunucularında şifreli HTTPS’yi etkinleştiren bir Sertifika Yetkilisidir (CA). Gerekli adımların çoğunu (tümü değilse de) otomatikleştirmeye çalışan bir yazılım istemcisi olan Certbot sağlayarak süreci basitleştirir. Şu anda, bir sertifika alma ve yükleme işleminin tamamı hem Apache hem de Nginx’te tamamen otomatiktir.

Bu kılavuzda, Ubuntu 20.04’te Apache için ücretsiz bir SSL sertifikası almak için Certbot’u kullanacağız ve bu sertifikanın otomatik olarak yenilenecek şekilde ayarlandığından emin olacağız.

Bu öğretici, Let’s Encrypt tarafından güvence altına alınacak web sitesini kurmak için Apache’nin varsayılan yapılandırma dosyası yerine ayrı bir sanal ana bilgisayar dosyası kullanır. Bir sunucuda barındırılan her etki alanı için yeni Apache sanal ana bilgisayar dosyaları oluşturmanızı öneririz, çünkü bu, yaygın hatalardan kaçınmaya yardımcı olur ve bir yedek kurulum olarak varsayılan yapılandırma dosyalarını korur.

Ön Gereksinimler

Bu yazıyı takip etmek için ihtiyacınız olacaklar:

  • Bir Ubuntu 20.04 sunucusu, bir sudo root olmayan kullanıcı ve bir güvenlik duvarı dahil olmak üzere, Ubuntu 20.04 sunucu kurulduktan sonra ilk yapılması gerekenler izlenerek kurulur.
  • Tamamen kayıtlı bir alan adı. Bu eğitici, baştan sona örnek olarak alan_adiniz’i kullanacaktır. Eğer henüz alan adınız yoksa Narweb.net alan adı bölümünden alan adınızı satın alabilirsiniz.
  • sunucunuz için aşağıdaki DNS kayıtlarının her ikisi de ayarlanmıştır.
    • Alan_adınız sunucunuzun genel IP adresini gösteren bir A kaydı.
    • Sunucunuzun genel IP adresini gösteren, www.alan_adiniz’in yer aldığı bir A kaydı.
  • Apache vırtual host ile birlikte kurulu olmalıdır. Bunun için “Ubuntu 20.04 üzerine LAMP(Linux, Apache, MySQL ve PHP) nasıl kurulur?” yazımızı takip edebilirsiniz.

1. Adım – Certbot’u Yükleme

Let’s Encrypt ile SSL sertifikası alabilmek için öncelikle sunucunuza Certbot yazılımını yüklememiz gerekecek. Bunun için varsayılan Ubuntu paket havuzlarını kullanacağız.

İki pakete ihtiyacımız var: certbot ve python3-certbot-apache. İkincisi, Certbot’u Apache ile entegre ederek, web sunucunuz içinde bir sertifika almayı ve HTTPS’yi tek bir komutla yapılandırmayı otomatikleştirmeyi mümkün kılan bir eklentidir.

sudo apt install certbot python3-certbot-apache

Y ve ardından ENTER tuşuna basarak yüklemeyi onaylamanız istenecektir.

Certbot artık sunucunuza yüklenmiştir. Bir sonraki adımda, sanal ana makinenizin uygun şekilde ayarlandığından emin olmak için Apache’nin yapılandırmasını doğrulayacağız. Bu, certbot istemci komut dosyasının alanlarınızı algılayabilmesini ve web sunucunuzu yeni oluşturulan SSL sertifikanızı otomatik olarak kullanacak şekilde yeniden yapılandırabilmesini sağlayacaktır.

2. Adım – Apache Virtual Host(Sanal Ana Bilgisayar) Yapılandırmanızı Kontrol Etme

Web sunucunuz için SSL’yi Let’s Encrypt üzerinden otomatik olarak alabilmek ve yapılandırabilmek için Certbot’un Apache yapılandırma dosyalarınızda doğru sanal ana bilgisayarı bulması gerekir. Sunucu alan adlarınız, VirtualHost yapılandırma bloğunuzda tanımlanan SunucuAdı ve ServerAlias yönergelerinden alınacaktır.

Eğer “Ubuntu 20.04 üzerine LAMP(Linux, Apache, MySQL ve PHP) nasıl kurulur?” yazımızı takip ettiyseniz, /etc/apache2/sites-available/alan_adiniz.conf adresinde SunucuAdı ve ayrıca ServerAlias yönergeleri zaten uygun şekilde ayarlanmış bir VirtualHost bloğunuz olmalıdır.

Bunu kontrol etmek için nano veya tercih ettiğiniz metin düzenleyiciyi kullanarak alanınız için sanal ana makine dosyasını açın:

sudo nano /etc/apache2/sites-available/alan_adınız.conf

Mevcut ServerName ve ServerAlias satırlarını bulun. Şöyle görünmeliler:

/etc/apache2/sites-available/alan_adınız.conf

...
ServerName alan_adınız
ServerAlias www.alan_adınız
...

ServerName ve ServerAlias ayarlarınızı zaten bu şekilde yaptıysanız, metin düzenleyicinizden çıkıp sonraki adıma geçebilirsiniz. Nano kullanıyorsanız, onaylamak için CTRL+X ve ardından Y ve ENTER tuşlarına basarak çıkabilirsiniz.

Mevcut sanal ana bilgisayar yapılandırmanız örnekle eşleşmiyorsa uygun şekilde güncelleyin. İşiniz bittiğinde dosyayı kaydedin ve düzenleyiciden çıkın. Ardından, değişikliklerinizi doğrulamak için aşağıdaki komutu çalıştırın:

sudo apache2ctl configtest

Yanıt olarak Syntax OK almalısınız. Bir hata alırsanız, sanal ana bilgisayar dosyasını yeniden açın ve herhangi bir yazım hatası veya eksik karakter olup olmadığını kontrol edin. Yapılandırma dosyanızın sözdizimi doğru olduğunda, değişikliklerin etkili olması için Apache’yi yeniden yükleyin:

sudo systemctl reload apache2

Bu değişikliklerle Certbot, doğru VirtualHost bloğunu bulabilecek ve güncelleyebilecektir.

Ardından, güvenlik duvarını HTTPS trafiğine izin verecek şekilde güncelleyeceğiz.

3. Adım – Güvenlik Duvarı Üzerinden HTTPS’ye İzin Verme

Önkoşul kılavuzlarında önerildiği gibi UFW güvenlik duvarını etkinleştirdiyseniz, HTTPS trafiğine izin vermek için ayarları yapmanız gerekir. Kurulumun ardından Apache birkaç farklı UFW uygulama profili kaydeder. Sunucunuzda hem HTTP hem de HTTPS trafiğine izin vermek için Tam Apache profilinden yararlanabiliriz.

Sunucunuzda şu anda ne tür trafiğe izin verildiğini doğrulamak için şunları kullanabilirsiniz:

sudo ufw status

Apache kurulum kılavuzlarımızdan birini izlediyseniz çıktınız şöyle görünmelidir, yani şu anda yalnızca 80 numaralı bağlantı noktasındaki HTTP trafiğine izin verilmektedir:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

Ek olarak HTTPS trafiğine izin vermek için “Apache Full” profiline izin verin ve gereksiz “Apache” profilini silin:

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

Durumunuz şimdi şöyle görünecek:

sudo ufw status
OutputStatus: active

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

Artık Certbot’u çalıştırmaya ve Let’s Encrypt sertifikalarınızı almaya hazırsınız.

4. Adım – SSL Sertifikası Alma

Certbot, eklentiler aracılığıyla Let’s Encrypt SSL sertifikaları almanın çeşitli yollarını sunar. Apache eklentisi, Apache’yi yeniden yapılandırmakla ve gerektiğinde yapılandırmayı yeniden yüklemekle ilgilenecektir. Bu eklentiyi kullanmak için aşağıdakini yazın:

sudo certbot --apache

Bu komut dosyası, SSL sertifikanızı yapılandırmak için bir dizi soruyu yanıtlamanızı ister. Öncelikle sizden geçerli bir e-posta adresi isteyecektir. Bu e-posta, yenileme bildirimleri ve güvenlik bildirimleri için kullanılacaktır:

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): siz@alan_adınız

Geçerli bir e-posta adresi sağladıktan sonra bir sonraki adıma geçmek için ENTER’a basın. Ardından, Let’s Encrypt hizmet şartlarını kabul edip etmediğinizi onaylamanız istenecektir. A’ya ve ardından ENTER’a basarak onaylayabilirsiniz:

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

Ardından, haberleri ve diğer bilgileri almak için e-postanızı Electronic Frontier Foundation ile paylaşmak isteyip istemediğiniz sorulacak. İçeriklerine abone olmak istemiyorsanız, N yazın. Aksi takdirde Y yazın. Ardından, bir sonraki adıma geçmek için ENTER’a basın.

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

Bir sonraki adım, HTTPS’yi etkinleştirmek istediğiniz alan adlarını Certbot’a bildirmenizi isteyecektir. Listelenen alan adları, Apache sanal ana bilgisayar yapılandırmanızdan otomatik olarak alınır; bu nedenle, sanal ana makinenizde yapılandırılmış doğru SunucuAdı ve SunucuAlias ayarlarına sahip olduğunuzdan emin olmanız önemlidir. Listelenen tüm alan adları için HTTPS’yi etkinleştirmek istiyorsanız (önerilir), istemi boş bırakıp devam etmek için ENTER tuşuna basabilirsiniz. Aksi takdirde, uygun her numarayı virgül ve/veya boşluklarla ayırarak listeleyerek HTTPS’yi etkinleştirmek istediğiniz alanları seçin ve ardından ENTER tuşuna basın.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: alan_adınız
2: www.alan_adınız
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

Çıktıyı şöyle göreceksiniz:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for alan_adınız
http-01 challenge for www.alan_adınız
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/alan_adınız-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/alan_adınız-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/alan_adınız-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/alan_adınız-le-ssl.conf

Ardından, HTTP trafiğinin HTTPS’ye yönlendirilmesini isteyip istemediğinizi seçmeniz istenecektir. Pratikte bu, birisi şifrelenmemiş kanallar (HTTP) üzerinden web sitenizi ziyaret ettiğinde, otomatik olarak web sitenizin HTTPS adresine yönlendirileceği anlamına gelir. Yönlendirmeyi etkinleştirmek için 2’yi veya web sitenize erişmenin ayrı yöntemleri olarak hem HTTP hem de HTTPS’yi tutmak istiyorsanız 1’i seçin.

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

Bu adımdan sonra, Certbot’un yapılandırması tamamlanır ve size yeni sertifikanız, oluşturulan dosyaların nerede bulunacağı ve sertifikanızın orijinalliğini analiz eden harici bir araç kullanarak yapılandırmanızın nasıl test edileceği hakkında son açıklamalar sunulur:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://alan_adınız and
https://www.alan_adınız

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

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/alan_adınız/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/alan_adınız/privkey.pem
   Your cert will expire on 2020-07-27. 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

Sertifikanız şimdi yüklendi ve Apache’nin yapılandırmasına yüklendi. https:// kullanarak web sitenizi yeniden yüklemeyi deneyin ve tarayıcınızın güvenlik göstergesine dikkat edin. Genellikle adres çubuğuna bir kilit simgesi ekleyerek sitenizin güvenli bir şekilde korunduğunu belirtmelidir.

Sertifikanızın derecesini doğrulamak ve sertifikanız hakkında harici bir hizmet açısından ayrıntılı bilgi almak için SSL Labs Sunucu Testini kullanabilirsiniz.

Bir sonraki ve son adımda, sertifikanızın son kullanma tarihinden önce otomatik olarak yenilenmesini garanti eden Certbot’un otomatik yenileme özelliğini test edeceğiz.

5. Adım – Certbot Otomatik Yenilemeyi Doğrulama

Let’s Encrypt’in sertifikaları sadece doksan gün geçerlidir. Bu, kullanıcıları sertifika yenileme sürecini otomatikleştirmeye teşvik etmenin yanı sıra kötüye kullanılan sertifikaların veya çalınan anahtarların süresinin er ya da geç sona ermesini sağlamak içindir.

Yüklediğimiz certbot paketi, certbot.timer adlı bir systemctl hizmeti tarafından yönetilen /etc/cron.d dosyasına bir yenileme komut dosyası ekleyerek yenilemeleri halleder. Bu komut dosyası günde iki kez çalışır ve sona erme tarihinden itibaren otuz gün içinde olan tüm sertifikaları otomatik olarak yeniler.

Bu hizmetin durumunu kontrol etmek ve etkin ve çalışır durumda olduğundan emin olmak için şunları kullanabilirsiniz:

sudo systemctl status certbot.timer

Şuna benzer bir çıktı alacaksınız:

Output● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
    Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
   Triggers: ● certbot.service

Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

Yenileme sürecini test etmek için certbot ile bir deneme çalışması yapabilirsiniz:

sudo certbot renew --dry-run

Herhangi bir hata görmüyorsanız, hazırsınız demektir. Certbot, gerektiğinde sertifikalarınızı yenileyecek ve değişiklikleri almak için Apache’yi yeniden yükleyecektir. Otomatik yenileme işlemi başarısız olursa, Let’s Encrypt belirttiğiniz e-postaya sertifikanızın süresi dolmak üzereyken sizi uyaran bir mesaj gönderir.

Bitirirken

Bu eğiticide, Let’s Encrypt istemci sertifikasını yüklediniz, alanınız için bir SSL sertifikası yapılandırıp yüklediniz ve Certbot’un otomatik yenileme hizmetinin systemctl içinde etkin olduğunu onayladınız. Certbot’u kullanmayla ilgili başka sorularınız varsa, belgeleri başlamak için iyi bir yerdir.