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
İ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 (posta@sizinalanadiniz.com 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
sizinalanadiniz.com kısımlarını kendinize göre değiştirmelisiniz
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
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