images

Django SSL Kurulumu

Let's Encrypt Nedir?

Let's Encrypt web sunucularının Http yerine Https kullanılmasını yaygınlaştırmak amacıyla SSL/TLS sertifikaların ücretsiz olarak üretilmesi ve dağıtılması amacıyla kurulmuştur. Sektörün önde gelen şirketleri bu servise sponsor olarak devamlılığını sağlamaktadır. 

 

 

 

Bu yazıda Ubuntu 18.04 & Django 3 kullanılmıştır ve adımlar Pardus işletim sistemi üzerinde uygulanmıştır

Sunucu üzerinde hali hazırda kurulu bir Nginx olduğu varsayılmıştır

Öncelikle buradan Let's Encrypt'i sunucuda otomatik çalıştırmamızı yarayacak 'Cert Bot' yazılımını yüklemek için official web sitesine gidiyoruz.

 

Ardından sunucumuzun çalıştığı programı ve üzerinde bulunduğu işletim sistemini seçiyoruz.

Karşımıza otomatik olarak kurulum adımları çıkacaktır.

Ardından ben Linux kullandığım için ssh servisini kullanarak sunucuma bağlanıyorum fakat siz Windows kullanıcısı iseniz PuTTY ile sunucunuza bağlanabilirsiniz.

 

Ve sırasıyla Cert Bot kurulumu için karşımıza çıkan komutları çalıştırıyoruz.

4. adıma geldiğimizde:

$ sudo certbot --nginx

 

Bizden sunucumuz üzerinde hangi web sitelerine kurulum yapılmasını istediğimizi soracak. Dilediğinizi belirttikten sonra otomatik olarak cert bot kurulumu tamamlanacaktır.

Ardından nginx konfigürasyon dosyası için:

 

Ve sitemiz için konfigürasyon dosyası bu şekilde olmalıdır

 

Ardından dosyamızı kaydedip çıkıyoruz. Proje kök dizinimizdeki settings.py veya production settings dosyamızı açıp aşağıdaki kodları ekliyoruz.

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

SECURE_SSL_REDIRECT = True

SESSION_COOKIE_SECURE = True

CSRF_COOKIE_SECURE = True

 

production_settings.py dosyamızın son görünümü bu şekilde olacaktır

 

 

Ardından 

systemctl restart nginx

komutu ile sunucumuzu yeniden başlatıyoruz ve SSL sertifikamız hayırlı olsun yessmiley

 

 

 

 

OPSİYONEL

Eğer DNS yönlendirmelerinizi Cloudflare üzerinden yapıyorsanız, web site yönetim panelinden SSL/TLS tab'ı içerisine gelerek;

 

Default olarak Flexible olarak ayarlanan encryption modunuzu Full yapmanız gerekmektedir. Bunun sebebi ise Cloudflare'in Flexible modunda kendi yüklediği SSL sertifikasını kullanıyor olmasıdır. Fakat biz kendi SSL sertifikamızı yüklediğimiz için Cloudflare'a kendi yüklediğimiz SSL sertifikasını kullanmasını söyledik.

 

 

Not: Bütün istekleri https üzerinden yapmasını söylediğimizde nginx içerisinde ufak bir konfigürasyon yapmamız gerekli. İlgili projenin nginx conf dosyasının en üst satırına bu blok yazılmalıdır. HTTP ile gelen istekleri Otomatik HTTPS'e redirect edecektir.

server {
    listen 80;
    listen [::]:80;
    server_name domaininiz.com www.domaininiz.com;
    return 301 https://domaininiz.com$request_uri;
}

 

 

 

Eğer subdomainlerimiz için de ssl kurmak istersek;

sudo certbot -d domain.com,sub.domain.com,sub.domain.com,sub.domain.com,www.domain.com --expand