Ücretsiz SSL Yükleme (LetsEncrypt) Ubuntu 18.04 + Apache / Nginx

Originally published at: http://yilmazsarac.com.tr/ucretsiz-ssl-yukleme-ubuntu-apache-letsencrypt-2/

SSL Güvenlik sertifikalarının kurulumu günümüzde birkaç yıl öncesinde olduğu gibi sorun olmaktan çıktı ve çoğu durumda, örneğin yüksek kapasiteli bir e-ticaret siteniz yoksa SSL Sertifikası için ücret ödemeniz gerekmez. Aşağıdaki adımları takip ederek sunucunuza kolayca SSL yükleyebilirsiniz.

LetsEncrypt Ücretsiz SSL Yükleme LAMP

Encrypt, ücretsiz TLS / SSL sertifikaları sağlayan bir Sertifika Yetkilisidir. (CA). Bu kurulum için gerekli adımların çoğunu otomatikleştirmeye yarayan bir yazılım istemcisi olan Certbot’u kullanın.

Şu anda, SSL Seritifkası edinme ve yükleme sürecinin tamamı Apache ve Nginx üzerinde tamamen otomatik hale getirilmiştir.

Bu kurulumda varsayılan yapılandırma dosyası yerine ayrı bir Apache sanal ana bilgisayar dosyasını kullanın.

Yaygın hataları önlemek için her bir etki alanı için yeni Apache sanal ana bilgisayar dosyaları (.conf) oluşturmanız gerekir.

Bu ne demek?.conf dosyası bir alan adı için gelen istekleri ayarlayan dosyadır. Aynı sunucuda barındırılan birden fazla alan adı tek bir .conf dosyasına yazılabilir, ancak bu bazen, örneğin SSL ayarlarında hataya neden olabilir. Bu nedenle her bir alan adı için ayrı .conf dosyası tavsiye edilir.

apache .conf dosyası nerede?

Kurulum öncesi yapılması gerekenler

Öncelikle Ubuntu 18.04 sunucusu kurulu olmalıdır. Sudo haklarına sahip bir kullanıcı ile komut girmek daha güvenlidir.

Kayıtlı bir alanadı

Burada örnek vermek amacıyla www.websitem.com kullanacağız. Alanadınızın NameServer ayarlarını yapılandırmayı unutmayın.

  • Sunucunuzun genel IP adresini işaret eden bir A kaydı
  • Sunucunuzun genel IP adresini işaret eden CNAME kayıtları
    www.websitem.com
    *.websitem.com
  • Alan adınız için sanal ana makine dosyanız olduğundan emin olun.
    /etc/apache2/sites-available/websitem.com.conf

Certbot Kurulumu

Let’s Encrypt SSL Sertifikası kurarken ilk adımda Certbot yazılımının sunucunuza yüklenmesi gerekir.

Certbot çok aktif bir gelişme içerisindedir, dolayısıyla Ubuntu tarafından sağlanan Certbot paketleri eski sürüm olabilir. Certbot geliştiricileri güncel sürümlere sahip bir Ubuntu yazılım deposu sunmaktadır. Certbot güncel paketini ekleyelim.

sudo add-apt-repository ppa:certbot/certbot

Şimdi paketi yükleyelim

sudo apt install python-certbot-apache

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

SSL Sertifikasını Kuralım

Certbot, SSL’yi otomatik olarak yapılandırmak için Apache konfigürasyonunuzda doğru sanal sunucuyu bulabilmelidir.

Bunu, sertifika isteğinde bulunduğunuz alanadıyla eşleşen bir yönerge (ServerName) arayarak yapar. etc/apache2/sites-enabled içinde alanınız için uygun şekilde ayarlanmış olan yönerge ile bir VirtualHost bloğuna sahip olmanız gerekir. (websitem.com.conf)

Not: .conf dosya adlarının alan adınızla uyuşması zorunlu değildir, ancak bu şekilde kullanarak hatırlaması kolay bir düzen sağlanabilir.

Dosyayı kendiniz oluşturmak istemiyorsanız default.conf dosyasını çoğaltın, adını websitem.com.conf olarak değiştirin ve aşağıda anlatılan düzenlemeyi yapın.

Alanadınızın sanal ana bilgisayar dosyasını nano veya diğer bir metin düzenleyicisi kullanarak açın:

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

ServerName yönergesini bulun ve aşağıdaki gibi değiştirin.

/etc/apache2/sites-available/websitem.com.conf

...
ServerName websitem.com;
ServerAlias www.websitem.com;
...

Dosyayı kaydedin (Ctrl+x, y, Enter) ve çıkın. Yaptığımız değişikliklerde bir hata olup olmadığını doğrulayalım.

sudo apache2ctl configtest

Hata almıyorsanız Certbot artık VirtualHost bloğunu bulabilir ve güncelleyebilir.

Şimdi, HTTPS trafiğine izin vermek için güvenlik duvarını güncelleyelim. Önce kontrol edelim, aşağıdaki komutu girin.

sudo ufw status

Aşağıdakine benzer bir çıktı almanız gerekir.

Output
Status: active

To Action From

OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)

Ek olarak Apache Tam profiline izin verelim ve yedek Apache profilini silelim.


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

Güvenlik Duvarını tekrar kontrol edelim.


sudo ufw status

Aşağıdaki gibi bir çıktı almanız gerekir.


Output
Status: active

To Action From

OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)

Şimdi Cerboot’u çalıştırıp sertifikamızı yüklemeye başlayalım. SSL Sertifikasının Alınması Certbot eklentileri aracılığıyla SSL sertifikalarını yüklemek için çeşitli yollar sunar.

Apache eklentisi, Apache’yi yeniden yapılandırma ve gerektiğinde yapılandırmayı yeniden yükleme ile ilgilenir. Bu eklentiyi kullanmak için aşağıdaki komutu girin.


sudo certbot --apache -d websitem.com -d www.websitem.com
.conf dosyanız olmadığında ya da yanlış yapılandırıldığında Certbot bu hatayı verecektir.

-d komutunu sertifikanın geçerli olmasını istediğiniz alanadlarını belirtmek için kullanılır. Cerbot ilk kez çalışıyorsa bir e-posta adresi girmeniz ve hizmet şartlarını kabul etmeniz istenecektir. Bunu yaptıktan sonra certbot, Let’s Encrypt sunucusuyla iletişim kurar, ardından sertifika isteğinde bulunduğunuz alanı kontrol eder ve devam eder. Bu başarılı olursa, certbot HTTPS ayarlarınızı nasıl yapılandırmak istediğinizi soracaktır.

Sitenize gelen isteklerin tümünü https’ye yönlendirilmesini zorunlu hale getirebilir (2) ya da http veya https tüm istekleri kabul edebilirsiniz (1).


Output
Please choose ....

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çiminizi yaptıktan sonra Cerbot başarılı olursa aşağıdaki gibi bir çıktı verir.


Output
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-07-23. 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

Yükleme işlemini tamamladık. Sitenizin adres çubuğunda yeşil kilit ikonunu görmeniz gerekir.

Certbot Otomatik Yenileme

Let’s Encrypt sertifikaları sadece doksan gün için geçerlidir. Bu durum kullanıcıların sertifika yenileme sürecini otomatikleştirmelerini teşvik etmektir.

Kurduğumuz certbot paketine bir yenileme senaryosu ekleyerek yenileme sürecini otomatikleştirebiliriz. /etc/cron.d.

Bu komut, günde iki kez çalışır ve geçerlilik süresinin sona ermesinden sonraki otuz gün içinde sertifikayı otomatik olarak yenileyecektir.

Yenileme sürecini test etmek için aşağıdaki komutla kuru çalışabilirsiniz:


sudo certbot renew --dry-run

Gerektiğinde, Certbot sertifikalarınızı yenileyecek ve değişiklikleri almak için Apache’yi yeniden yükleyecektir.

Otomatik yenileme süreci başarısız olursa, Encrypt, belirttiğiniz e-postaya bir sertifika gönderir ve sertifikanızın geçerliliği sona erdiğinde sizi uyarır. Kolay gelsin.

Ubuntu / Nginx üzerinde SSL-Let’s Encrypt Kurulumu

Let’s Encrypt ile Ubuntu 16.04 üzerinde ücretsiz ssl sertifikası kurulumu

Let’s Encrypt, ücretsiz TLS / SSL sertifika alma, kurma ve web sunucularında şifrelemeyi yani HTTPS’yi etkinleştirmeyi ücretsiz sağlayan bir Sertifika Yetkilisidir. (CA) . Aşağıdaki adımların çoğunu otomatikleştirmek yani süreci basitleştirmek için Apache’de olduğu gibi Certbot yazılım istemcisini kullanacağız.

SSL Sertifikası edinme ve yükleme sürecinin tamamı Apache ve Nginx üzerinde otomatik hale getirilmiştir.

Bu rehberde ayrı bir sunucu bloğu dosyası yerine varsayılan Nginx yapılandırma dosyasını kullanacağız. Her etki alanı için farklı Nginx sunucu blok dosyaları oluşturmanız bazı yaygın hataları önlemeye ve varsayılan dosyaların amaçlandığı gibi yapılandırmasına olanak sağlar. SSL’i sunucu blokları kullanarak kurmak istiyorsanız aşağıdaki adımları takip etmelisiniz.

Hazırlık – Her şeyin doğru çalışması için ihtiyacınız olan bilgiler:

  • Ubuntu 16.04 sunucusunu kurmuş olmanız gerekir.
  • Güvenlik açısından “root” değil root haklarına sahip başka bir kullanıcı oluşturmalısınız.
  • Nginx Web Sunusu kurulu olmalıdır.
  • Kayıt edilmiş bir alan adına ihtiyacınız olacak. Uzantısı önemli değil ancak isim sunucularını (nameserver) doğru şekilde yapılandırmalısınız.

A Kaydı
alanadiniz.com —-> Sunucunuzun IP Adresi

CNAME
www.alanadiniz.com --> alanadiniz.com
*.alanadiniz.com --> alanadiniz.com

Certbot Kurulumu

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

Certbot paketini ekleyin, aşağıdaki komutu girin.

sudo add-apt-repository ppa:certbot/certbot

Paket bilgilerini güncelleyelim.

sudo apt-get install python-certbot-nginx

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

Nginx Ayarları

Certbot, Nginx için SSL’i otomatik olarak yapılandırabilir, ancak yapılandırmanızın doğru sunucu bloğunu bulabilmesi gerekir. Bunu dosya içinde, sertifika isteğinde bulunduğunuz alanla eşleşen bir yönerge (server_name )arayarak yapar .

Yeni bir Nginx yüklemesiyle başlıyorsanız, varsayılan yapılandırma dosyasını güncelleyebilirsiniz. Dosyayı editörünüzde açın. (/etc/nginx/sites-available/default)
server_name satırını bulun ve alan adınızla aşağıdaki gibi değiştirin. Boşluk bırakarak www. versiyonunu da eklemeyi unutmayın.

server_name alanadiniz.com www.alananiniz.com;

Dosyayı kaydedin ve kapatın.

Nginx yapılandırmasındaki sözdizimini doğrulayın.

sudo nginx -t

Herhangi bir hata alırsanız, dosyayı yeniden açın ve yazım hatalarını kontrol edin, ardından tekrar test edin.

Yapılandırmanızın sözdizimi doğru olduğunda, yeni yapılandırmayı aktif etmek için aşağıdaki komutla Nginx’i yeniden başlatın.

sudo systemctl reload nginx

Certbot şimdi doğru sunucu bloğunu bulabilir ve güncelleyebilir.

Şimdi, HTTPS trafiğine izin vermek için güvenlik duvarımızı güncelleyeceğiz.

Güvenlik Duvarı üzerinden HTTPS’ye İzin Verme

Nginx, güvenlik duvarı için (ufw), kurulumla birlikte birkaç profil kaydeder. Güvenlik duvarı kurmanıza gerek yoktur.

Kontrol edelim

sudo ufw status

Yeni kurulmuş bir web sunucusunda yalnızca HTTP trafiğine izin verildiği için muhtemelen şu şekilde görünecektir:


Output
Status: active

To Action From


OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)

Ek olarak Nginx tam profiline izin verebilir ve sonra Nginx HTTP profilini silebiliriz:


sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Durumu kontrol edelim,

sudo ufw status

komut satırı aşağıdaki gibi bir çıktı vermeli.


Output
Status: active

To Action From


OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)

Artık Certbot’u çalıştırmaya ve sertifikalarımızı almaya hazırız.

SSL Sertifikasının Alınması

Certbot, SSL sertifikaları almak için eklentiler aracılığıyla çeşitli yollar sunar. Nginx eklentisi, Nginx’in yeniden yapılandırılması ve gerektiğinde yapılandırmanın yeniden yüklenmesi ile ilgilenir:

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

Sertifikanın geçerli olmasını istediğimiz adlarını (-d) ve --nginx eklentisi çalışacağını belirtiyoruz.

Certbot ilk kez çalışıyorsa bir e-posta adresi girmenizi ve hizmet şartlarını kabul etmenizi isteyecektir. Bunu yaptıktan sonra Certbot, Let’s Encrypt sunucusuyla iletişim kurar ve ardından sertifika isteğinde bulunduğunuz alanadını kontrol eder.

İşlem başarılı olursa, certbot HTTPS ayarlarınızı nasıl yapılandırmak istediğinizi soracaktır. Tüm istekleri Https’ye yönlendirebilir, ya da hem http hem de https kullanabilirsiniz. Bir nedeniniz yoksa 2’yi seçmenizi tavsiye ederim.


Output
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çiminizi yapıp Enter’a bastıktan sonra Nginx yeniden yüklenecektir.
Bu işlem, başarılı olduğunu ve sertifikalarınızın nerede saklandığını bildiren aşağıdaki gibi bir mesajla sona erer:


Output
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2017-10-23. 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

Alanadınızı tarayıcıya yazarak güvenlik sertifikasının yuklendiğini dogrulayabilirsiniz. Unutmayın, hali hazırda çalışan bir web sitesinin alan adı üzerine SSL sertifikası kurduysanız, tarayıcı adres çubuğunda yeşil ikon görünmeyebilir. Bunun nedeni genellikle sitenizdeki bağlantıların bir veya daha fazlasının http ile yazılmış olmasıdır. Örneğin bir görseli sitenizin kök dosyasından çağırıyor olsanız bile “alanadiniz.com/img/resim.jpg” şeklinde çağırmalısınız. Sitenizdeki güvenli olmayan bağlantıları görmek için Chrome ve Firefox’un geliştirici aracını kullanabilirsiniz. Güvenli olmayan yani “http” ile başlayan bağlantıları tespit edip düzelttiğinizde sertifikanız doğru şekilde çalışacaktır.

Certbot Otomatik Yenileme

Encrypt sertifikaları sadece doksan gün için geçerlidir. Bu durum kullanıcıların sertifika yenileme sürecini otomatikleştirmelerini teşvik eder. Certbot, yüklü paketi, systemd zamanlayıcısı aracılığıyla günde iki kez çalıştırak bizim için bunu otomatik yapar. Sistem dışı dağıtımlarda, bu işleve yerleştirilmiş bir betik sağlanır. /etc/cron.d. Bu görev günde iki kez çalışır ve geçerlilik süresinin sona ermesinden sonraki otuz gün içinde sertifikayı yeniler. (sertifika bitiş tarihinin hemen öncesinde çalıştığını varsayarak)

Yenileme sürecini aşağıdaki komutu girerek test edebilirsiniz:

sudo certbot renew --dry-run

Hata görmüyorsanız, her şey tamamdır. Otomatik yenileme, gerektiğinde, Certbot sertifikalarınızı yenileyecek ve değişiklikleri almak için Nginx’i yeniden yükleyecektir. Otomatik yenileme süreci başarısız olursa, Let’s Encrypt komut satırında belirttiğiniz e-postaya bir sertifika gönderir ve sertifikanızın geçerliliği sona erdiğinde sizi uyarır.

Certbot aracılığı ile Let’s Encrypt istemcisini, sertifikalarını ve bu sertifikaları kullanacak şekilde yapılandırılmış Nginx’i yüklediniz ve otomatik sertifika yenilemeyi kurdunuz. Kolay gelsin.

Ek Bilgi

Alanadı yönlendirme (Nginx)

Sunucu yapılandırmanıza aşağıdaki kodu ekleyin:

server { server_name .domain.com;
return 302 $scheme://forwarded-domain.com;
}

Nginx yeniden başlat

sudo /etc/init.d/nginx restart