Nginx ve Ubuntu 16.04 için Ücretsiz SSL Dağıtıcısı Let's Encrypt Entegrasyonu
Giriş
Ücretsiz olarak TLS/SSL sertifikaları sağlayan Let’s Endcrypt sertifika otoritesi (CA) bir sivil toplum kuruluşu olan Internet Security Research Group (ISRG) tarafından tüm web sitelerini SSL ile güvenli bağlantıya kavuşturmak amacıyla kurulmuştur. Bağışlar ve destekleyen firmalar tarafından finanse edilen şirket 2015 yılından günümüze ücretsiz olarak SSL sertifikaları sağlamaktadır.
SSL sertifikalarının otomatik olarak üretilmesi, kurulması ve yenilenmesi için iş süreçlerini basitleştirmek amacı ile Let’s Endcrypt yazılım istemcisi Certbot’u kullanarak Apache ve Nginx web servislerinde tüm SSL işlemleri tamamen otomasyona bağlanmıştır.
Hazırladığımız bu dokümanımızda Ubuntu 16.04 versiyonu ve Nginx için ücretsiz bir SSL sertifikası almak amacıyla Certbot’u kullanacak ve sertifikalarınızın otomatik şekilde süresi dolduğunda yenilenmesini sağlayacak bir biçimde ayarlayacağız.
Gereksinimler
Bu dokümanı uygulamak için ihtiyaçlarınızın tam listesi;
- Ubuntu 16.04 kurulu ve sudo root kullanıcı erişimi açık, güvenlik duvarı olan sunucuya sahip olmak.
- Yönetimi sizde olan kayıtlı bir alan adına sahip olmak.
- Sahip olduğunuz alan adının sunucunuza yönlendirilmiş olması.
- Alan adı DNS A kaydının tam olarak ornekdomain.com şeklinde ve www.ornekdomain.com şeklinde sizin sunucunuza ait IP adresini çözümlemesi.
Tüm adımları gerçekleştirmek için bu maddelere ihtiyacınız olacaktır.
1. Adım - Certbot Kurulumu
Let’s Encrypt ile ücretsiz SSL sertifikasına sahip olmanın ilk adımı Certbot yazılımını sunucunuza yüklemektir.
Certbot çok sık yenilenen, güncellenen bir yazılımdır ve bundan dolayı sürekli güncel sürüme sahip olmak için Ubuntu tarafından sağlanan Certbot paketlerini kullanmanızı tavasiye ederiz. Paket yöneticisi ile yüklenen yazılımların güncellemesi çocuk oyuncağıdır. Certbot geliştiricileri en güncel sürümleri kendi Ubuntu yazılım güncelleme deposunda (reposunda) bulundurur.
İlk işlem olarak bu repoyu sunucumuza ekleyelim
sudo add-apt-repository ppa:certbot/certbot
Komutu yazıp ENTER tuşladıktan sonra işletim sisteminizde repo güncellemesi başlatın.
sudo apt-get update
Son bir işlem olarak Nginx ve Certbot yazılımını yüklemek için alt kısımdaki komutu çalıştırın.
sudo apt-get install python-certbot-nginx
Certbot için yapmamız gereken başka bir işlem yok ancak Nginx için yapılandırma yapmamız gerekmektedir.
2. Adım - Nginx Yapılandırması
Certbot, Nginx için SSL kurulumunu otomatik olarak yapmakta ancak yapılandırma kontrolü için SSL kurulacak alan adını sunucuda çözümlemesi gerekmektedir. Sertifika isteğinde bulunduğunuzda alan adı doğrulama işlemi için mevcut alan adınızın bu sunucuda erişilebilir olması gerekmektedir.
Yeni kurulan Nginx web sunucusunda varsayılan yapılandırma dosyasını düzenlemek sureti ile işlem yapabilirsiniz. Bunun için herhangi bir metin editörü ile varsayılan konfügurasyon dosyasını açın
sudo nano /etc/nginx/sites-available/default
Konfigurasyon dosyası yazım formatını bozkadan mevcut server_name alanı karşısına www ile başlayan ve bir boşluk bırakarak www olmadan alan adınızı yazınız.
###
server_name www.ornekdomain.com ornekdomain.com
###
Konfigurasyon dosyasını kaydedip çıktıktan sonra herhangi bir yazım yanlışı var mı, kontrol etmek için alt kısımdaki komutu çalıştırınız.
sudo nginx -t
Çalıştırdığınız bu komutun sonucunda herhangi bir hata alırsanız konfigürasyon dosyasını tekrar açıp yazım hatalarını düzeltiniz.
Eğer yapılandırmanız doğru ise yeni konfigürasyon dosyası ile Nginx web sunucusunu çalıştırmak için alt kısımda yer alan komutu uygulayınız
sudo systemctl reload nginx
Tüm bu işlemlerin sonunda Certbot şimdi sunucuda SSL kurulumu başlatırken alan adınızı bulacak ve güncelleme yapabilecektir. Sonraki adımda HTTPS trafiğine izin vermek için güvenlik duvarımızda yapılacak güncellemeler anlatılacak.
3. Adım - HTTPS Trafik İzni
Eğer ufw güvenlik duvarını etkinleştirdiyseniz bu adımda HTTPS trafiğine izin vermek için hangi ayarları değiştirmeniz gerektiğini anlatacağız. Sunucunuzda ufw etkin değilse bu adımı atlayabilirsiniz. Nginx kurulduğunda kurulum esnasında ufw bir kaç profil oluşturur
Şuan geçerli ayarları görmek için alt kısımdaki komutu çalıştırınız.
sudo ufw status
Eğer görünümü alt kısımdaki gibiyse sadece HTTP trafiğine izin verildiğini göreceksiniz.
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 HTTPS trafiğine de izin vermek için Nginx kurulumu ile gelen profile izin verebilir ve oluşturulmuş HTTP iznini de silebilirsiniz.
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
Tüm işlemleri yaptığınızda şu status parametresi çıktısı şu kelilde olmalıdır.
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Bu adımı da tamamladıktan sonra artık Certbot’u çalıştırmaya ve sertifika üretip, kurulumunu yaptırmaya hazırız.
4. Adım - SSL Sertifikası Oluşturma
Certbot, Nginx için eklentisi ile konfigürasyon dosyasını yapılandırılması ve gerektiğinde mevcut yapılandırılan konfigürasyonu yeniden oluşturmasını sağlamaktadır.
sudo certbot --nginx -d www.ornekdomain.com -d ornekdomain.com
Bu komut ile Certbot –nginx parametresi sayesinde Nginx eklentisi ile çalışmaktadır. Alan adlarını da -d parametresi ile belirleriz. Sertifikalar Certbot ile bu şekilde oluşturulur.
Eğer ilk defa Certbot çalıştırıyorsanız sizden bir e-posta adresi girmenizi ve hizmet sözleşmesini kabul etmenizi isteyecektir. Bunu yaptıktan sonra Certbot, Let’s Encrypt sunucusu ile iletişim kurar, ardından sertifika isteğinde bulunduğunuz alan adlarını doğrulamak için sunucunuza istek gönderir.
Tüm bu işlemler başarılı olursa Certbot HTTPS için Nginx ayarlarını 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):
Bu ekranda seçiminizi yaparak ENTER tuşlamanız gerekir. Bununla birlikte Nginx için yeni konfigürasyon oluşturulur ve konfigürasyonun geçerli sayılabilmesi için Nginx baştan başlatılır. Son işlem olarak Certbot, tüm bu sürecin başarılı olduğunu ve sertifikalarınızın nerede saklandığını gösteren bir mesajla işlemi sonlandırır.
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
Web sitenizi şimdi https:// kullanarak tekrar açmayı deneyiniz. Adres çubuğunda yeşil https:// ve Güvenli ibaresini görüyorsanız her şey yolunda demektir. Alan adınızı SSL Labs Server Testini kullanarak test ederseniz, A notu aldığınızı göreceksiniz.
Son bir adım olarak SSL sertifikalarınızın otomatik yenilenmesi için
5. Adım - Otomatik Sertifika Yenileme
Let’s Encrypt sadece 90 günlük SSL sertifikası üretir. Buda kullanıcıların sertifika yenileme sürecini otomasyona bağlamaya teşvik eder. Kurduğumuz Certbot yazılımını bir zamanlanmış görev (cron) işlemi ile günde 2 defa olmak üzere yenileme parametresi ile çalıştırarak tüm süreci otomasyona bağlamak mümkündür. Biz otomatik kurulum yaptığımız için bu zamanlanmış görevler de otomatik olarak sistemimize eklenir ancak farklı bir işletim sistemi veya paket yöneticisi kullanmadan işlem yapıyorsanız /etc/cron.d dosyasına yerleştirilmiş bir bash script ile de bunu yapabilir veya crontab -e komutunu kullanabilirsiniz.
Yenileme sürecini test etmek için Certbot ile SSL sertifikası alınmış sunucumuzda alt kısımda yer alan komutu çalıştırabilirsiniz.
sudo certbot renew --dry-run
Eğer bir hata görmüyorsanız bu komutu zamanlanmış görev (cron) içerisinde kullanabilirsiniz. Bu komut sertifikalarınızı yenileyecek ve değişiklikleri geçerli kılmak için Nginx web servisinizi de yeniden başlatacaktır. Eğer bu otomatik yenileme başarısız olursa Certbot’u ilk çalıştırdığınız esnada girdiğiniz e-posta adresine sertifikanızın geçerlilik süresi dolduğunda size e-posta gönderilecektir.
Sonuç
Bu dokümanımızda Let’s Encrypt tarafından ücretsiz olarak sağlanan SSL sertifikalarını Certbot yazılımı kullanarak üretmeyi, Nginx üzerine kurmayı ve Certbot ile sertifikalarımızı otomatik olarak yenilemeyi öğrendik. Tüm bu konular hakkında sormak istediğiniz sorularınızı yorum bölümünden bizlere iletebilirsiniz. Aynı şekilde dokümanı ilgilendiren konular ile ilgili Soru/Cevap sayfasında yeni soru oluşturabilirsiniz.
Umarım doküman sizin için faydalı olmuştur. Mutlu günler dilerim.
Yararlı bir bilgi, teşekkürler.