Ubuntu 18.04 Üzerinde Apache'ye Let's Encrypt İle SSL Sertifikası Kurulumu

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

Bu öğreticide, Ubuntu 18.04’te Apache 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 yapılandırma dosyası yerine ayrı bir Apache sanal ana bilgisayar 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 bir alan için yeni Apache sanal ana bilgisayar dosyaları oluşturmanızı öneriyoruz.

Ön şartlar

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

  • Kök kullanıcı ya da sudo yetkili bir kullanıcı ve ufw güvenlik duvarı
  • Ubuntu 18.04 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ı.
  • Ubuntu 18.04 Üzerinde Linux, Apache, MySQL, PHP (LAMP) Kurulumu konusundaki sanal ana bilgisayar oluşturma işlemi.
  • Bu eğiticide biz örnek olarak 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.

Certbot geliştiricileri güncel sürümleri yayınladıkları bir Ubuntu yazılım deposunu bulundururlar, biz bu depoyu kullanacağız.

İlk olarak, depoyu ekleyin:

sudo add-apt-repository ppa:certbot/certbot

Kabul etmek için ENTER tuşuna basmanız gerekecektir.

Certbot’un Apache paketini aşağıdaki komutla kurun:

sudo apt-get update
sudo apt install python-certbot-apache -y

Şimdi Diffie-Hellman grubu oluşturun. Diffie – Hellman anahtar değişimi (DH), güvenli olmayan bir iletişim kanalı üzerinden kriptografik anahtarları güvenli bir şekilde değiştirmenin bir yöntemidir. Güvenliği güçlendirmek için yeni bir 2048 bit DH parametre seti oluşturacağız:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

:warning: İsterseniz, boyutu 4096 bite kadar değiştirebilirsiniz, ancak bu durumda, sistem entropisine bağlı olarak anahtar üretimi 30 dakikadan fazla sürebilir.

Çıktı şu şekilde görünmelidir;

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..................+........................+.......................+....................................+.............................................................................................................................+........................................................................+.............................................................................................................................................................+.............................................................................................................................+...............................................................................................................................................+............+....................+...........+..........................+....................................................................................................................................................+.........................................+.....................................................................................................+..........................+............................................................................................+....++*++*++*++*

Certbot artık kullanıma hazır, ancak Apache SSL yapılandırması için Apache’nin bazı yapılandırmalarını doğrulamamız gerekiyor.

Adım 2 - SSL Sertifikasını Ayarlama

Şimdi gerekli dizinleri aşağıdaki komutlarla oluşturalım ve Apache sunucusu için yazılabilir hale getirelim.

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt

Kodların kopyalanmasını önlemek için aşağıdaki gibi iki yapılandırma snippet’ini oluşturun:

sudo nano /etc/apache2/conf-available/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>
sudo nano /etc/apache2/conf-available/ssl-params.conf
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Şu iki modülü etkinleştirin;

sudo a2enmod ssl
sudo a2enmod headers

Ardından, aşağıdaki komutları çalıştırarak SSL yapılandırma dosyalarını etkinleştirin:

sudo a2enconf letsencrypt
sudo a2enconf ssl-params

Sitelerinizi daha hızlı ve daha sağlam hale getirecek HTTP / 2 modülünü etkinleştirin:

sudo a2enmod http2

Değişikliklerin etkili olması için Apache yapılandırmasını yeniden yükleyin:

sudo systemctl reload apache2

Certbot’un SSL’i otomatik olarak yapılandırması için Apache yapılandırmanızda doğru sanal ana bilgisayarı bulabilmesi gerekir. Bunu, sertifika istediğiniz alanla eşleşen bir yönergeyi yani ServerName arayarak yapar.

Ubuntu 18.04 Üzerinde Linux, Apache, MySQL, PHP (LAMP) Kurulumu konusundaki sanal ana bilgisayar oluşturma işlemi ile önceden ayarlanmış olan etki alanı /etc/apache2/sites-available/sizinalanadiniz.com.conf VirtualHost bloğuna sahip olmalısınız.

Kontrol etmek için şu komutu kullanarak alan adınız için sanal ana makine dosyasını nano veya favori metin düzenleyiciniz ile açın:

sudo nano /etc/apache2/sites-available/sizinalanadiniz.com.conf

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

ServerName sizinalanadiniz.com

Doğru görünüyorsa, 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ırma düzenlemelerinizin söz dizimini doğrulayın:

sudo apache2ctl configtest

Bir hata alırsanız, sanal ana makine dosyasını yeniden açın ve yazım hataları veya eksik karakterler 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 Apache’yi yeniden başlatın:

sudo systemctl reload apache2

Certbot artık doğru VirtualHost bloğunu bulabilir ve güncelleyebilir durumdadır.

Ardından, HTTPS trafiğine izin vermek için güvenlik duvarımızı güncelleyelim.

Adım 3 - Güvenlik Duvarında HTTPS’ye İzin Verme

Durumu ve geçerli yapılandırmayı şu komutu yazarak görebilirsiniz:

sudo ufw status

Muhtemelen şöyle görünecektir, yani web sunucusuna yalnızca HTTP trafiğine izin verilir şeklinde:

Status: active

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

HTTPS trafiğine ek olarak Apache tam profiline izin verin ve yedek Apache profil izinlerini silin:

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

Durum şimdi şöyle görünmelidir:

sudo ufw status
Status: active

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

Şimdi Certbot’u çalıştıralım ve sertifikalarımızı oluşturalım.

Adım 4 - SSL Sertifikası Alma

Certbot, eklentileri aracılığıyla SSL sertifikaları almanın çeşitli yollarını sunar. Apache eklentisi, Apache’nin yeniden yapılandırılması ve gerektiğinde yapılandırmanın yeniden yüklenmesi ile ilgilenecektir. Bu eklentiyi kullanmak için aşağıdaki komutu yazın ([email protected] kısmını kendinize göre değiştirmeyi unutmayın!):

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

Bu komut certbot ile --apache kullanarak, -d etki alan adlarına sertifika almak anlamına gelir. Ayrıca burada sertifikanın nereye oluşturulacağını söylüyor, sözleşmeyi de kabul edip, e-posta adresimizi veriyoruz.

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.

Şu şekilde bir çıktı görürseniz 2 seçin ve devam edin;

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

Sonrasında şu çıktıyı görmelisiniz;

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-10. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. 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/d

:warning: sizinalanadiniz.com kısımlarını kendinize göre değiştirmelisiniz :warning:

Artık sertifika dosyalarına sahip olduğunuza göre, etki alanı sanal ana bilgisayar yapılandırmanızı aşağıdaki gibi düzenleyin:

sudo nano /etc/apache2/sites-available/sizinalanadiniz.com.conf
<VirtualHost *:80> 
  ServerName sizinalanadiniz.com
  ServerAlias www.sizinalanadiniz.com

  Redirect permanent / https://sizinalanadiniz.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName sizinalanadiniz.com
  ServerAlias www.sizinalanadiniz.com

  Protocols h2 http:/1.1

  <If "%{HTTP_HOST} == 'www.sizinalanadiniz.com'">
    Redirect permanent / https://sizinalanadiniz.com/
  </If>

  DocumentRoot /var/www/sizinalanadiniz.com/public_html
  ErrorLog ${APACHE_LOG_DIR}/sizinalanadiniz.com-error.log
  CustomLog ${APACHE_LOG_DIR}/sizinalanadiniz.com-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/sizinalanadiniz.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/sizinalanadiniz.com/privkey.pem

  # Diger Apache yapilandirmalari

</VirtualHost>

Yukarıdaki yapılandırma ile her ziyaretçiyi HTTPS’ye zorluyoruz ve www’den, www olmayan sürüme yönlendiriyoruz.

Değişikliklerin etkili olması için Apache hizmetini yeniden başlatın:

sudo systemctl reload apache2

Hepsi bu kadar! Alan adımızı HTTPS ile ziyaret ederek doğrulayalım;

Alan adınızı SSL Labs Sunucu Testi’ni kullanarak test ederseniz, bir A + notu alırsınız :wink:

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 nano /etc/cron.d/certbot

Şu kısmı silin ve,

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

Yerine şunu ekleyin,

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload apache2"

Daha sonra bir test daha yapalım;

sudo certbot renew --dry-run

Şu çıktıyı görmelisiniz;

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/sizinalanadiniz.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/sizinalanadiniz.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/sizinalanadiniz.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)

Hata görmüyorsanız, hazırsınız demektir. Gerektiğinde Certbot, sertifikalarınızı yenileyecek ve değişiklikleri uygulamak için Apache’yi 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 istemcisini yüklediniz, certbot ile alan adınız için SSL sertifikaları oluşturdunuz, Apache’yi 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, kendi resmi belgelerine bakabilirsiniz.

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