Cloudflare ve Nginx ile SSL Aktifleştirme

Merhaba arkadaşlar, bu yazımda Express.js çalışan bir sunucuda Nginx kullanarak SSL (HTTPS) aktifleştirmesini anlatmaya çalışacağım.

Gereksinimler

  • Nginx

Benim hali hazırda kurulu bir sunucum var.

Image for post
Image for post
Image for post
Image for post
Cloudflare portala eklenmiş bir domain ve Express.js çalışan bir sunucu

SSL Sertifikası Oluşturma

Öncelikle portala giriyoruz ve SSL/TLS menüsüne gidiyoruz.

Image for post
Image for post

Daha sonra SSL/TLS şifreleme modunu seçiyoruz.

Image for post
Image for post
  • Off: SSL kapalıdır.

Eğer geçerli bir SSL sertifikanız var ise, Full (Strict) modunu seçmelisiniz. Bu yazıda anlatılanlar Cloudflare üzerinden oluşturulan sertifika için geçerlidir.

Daha sonra Origin Server sekmesine tıklıyoruz.

Image for post
Image for post

Açılan sayfada Origin Certificates kısmından Create Certificate butonuna tıklayıp yeni bir sertifika oluşturmak için adımları başlatıyoruz.

Image for post
Image for post

Butona basınca açılan modal sayfasında bir değişiklik yapmanıza gerek yok, Next butonuna tıklıyoruz.

Image for post
Image for post
Origin Certificate Installation sayfası

Next butonuna tıklayınca 1 sertifika ve 1 şifre dosyası oluşturulacak. Bu oluşturulan bu dosyaları (Origin Certificate ve Private Key) .pem uzantılı olarak kaydetmelisiniz. Bu dosyaları nginx üzerinde tanımlayıp SSL için kullanacağız.

Image for post
Image for post

SSL Sertifikasını Sunucuya Yükleme

SSH ile sunucumuza bağlanıyoruz ve nginx klasörünün içerisinde sertifika ve key dosyamızı saklayacağımız ssl klasörünü oluşturuyoruz.

root@ubuntu:~# mkdir /etc/nginx/ssl

Sertifika ve key dosyamızı oluşturmak için ssl klasörünün içerisine giriyoruz.

root@ubuntu:~# cd /etc/nginx/ssl/
root@ubuntu:/etc/nginx/ssl#

nano ile sertifika dosyasını oluşturmak için ssl klasörünün içinde nano cert.pem komutunu çalıştırıyoruz ve kopyaladığımız sertifika içeriğini yapıştırıp kaydediyoruz. nano editöründen CTRL + X bastıktan sonra Y tuşuna basarak kaydedip çıkabilirsiniz.

Image for post
Image for post
nano ile sertifika dosyasının oluşturulması

Aynı işlemi key dosyası için de yapıyoruz. Bu sefer nano key.pem komutunu çalıştırıyoruz ve yine private key kısmında kopyaladığımız içeriği yapıştırıp kaydediyoruz.

Sonuç olarak ssl klasörümüzde 2 dosya olmalı, birisi cert.pem diğer ise key.pem. ls komutu ile klasör içeriğini görebilirsiniz.

root@ubuntu:/etc/nginx/ssl# ls
cert.pem key.pem

SSL Sertifikasını Nginx’e Tanıtma

Nginx ayarlarını yapabilmek için nginx klasörü içerisinde bulunan sites-available klasörüne gidip default dosyasını düzenleyebiliriz.

root@ubuntu:~# cd /etc/nginx/sites-available/
root@ubuntu:/etc/nginx/sites-available# ls
default

nano default komutu ile bu dosyayı düzenleyip içeriğini aşağıdaki gibi yapıyoruz.

# Default server configuration
#
server {
listen 80;
server_name _;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://localhost:3000";
}
}
server {
listen 443 ssl http2;
server_name _;

ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;

location / {
proxy_pass http://localhost:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Burada 2 adet server direktifimiz var. Birisi 80 (HTTP) portunu dinliyor ve gelen istekleri 3000 portunda çalışan Express.js sunucumuza yönlendiriyor.

Diğer server direktifi ise 443 (HTTPS) portunu dinliyor ve gelen istekleri 3000 portunda çalışan Express.js sunucumuza yönlendiriyor. Üsttekinden ayrı olarak da aşağıdaki satırları ekleyerek SSL sertifikasını aktifleştirmiş olduk.

ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;

Tabii burada şöyle bir senaryo da izlenebilir. Express.js sunucusunu 2 port üzerinden çalıştırabilirsiniz, örnek olarak bir 3000 bir de 443. 3000 olana HTTP üzerinden gelenleri, 443 olana da yine HTTPS olanları yönlendirebilirsiniz. Ben burada tek porta yönlendirdim.

Nginx konfigürasyonunu test etmek, default dosyasına yazdığımız komutların doğruluğunu kontrol etmek için aşağıdaki komutu kullanabiliriz.

root@ubuntu:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Eğer karşılık olarak yukarıdaki gibi successful mesajını aldıysanız, her şey yolunda gidiyor demektir. nginx servisini reload yapalım ve yaptığımız ayarların aktif olmasını sağlayalım.

root@ubuntu:~# nginx -s reload

Komutu çalıştırdıktan sonra, SSL sertifikasının doğru tanımlanıp tanımlanmadığını kontrol edelim.

Image for post
Image for post
HTTPS ile adresimize ulaştık

Evet, sertifikamız doğru yüklenmiş ve bağlantımız güvenli olarak işaretlenmiş gözüküyor. Fakat şöyle bir durum var, adrese hala HTTP ile güvenli olmayan protokol ile ulaşabiliyoruz.

Image for post
Image for post
HTTP ile adresimize ulaştık

Peki biz sitemize sadece HTTPS üzerinden ulaşılmasını istiyorsanız ne yapmalıyız? Menüden Edge Certificates sayfasına girelim.

Image for post
Image for post

Always Use HTTPS ayarını aktifleştirelim, bu ayarı yaptıktan sonra artık HTTP ile gitseniz dahi otomatik olarak HTTPS’e yönlendirileceksiniz.

Image for post
Image for post

Umarım faydalı olmuştur, yanlış veya eksik anlattığım bir yer varsa lütfen yorum yazarak katkıda bulunun. Herkese sağlıklı günler dilerim.

Written by

Full-Stack Front End Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store