於Django應用程式裡採用HTTPS對於保護用戶數據非常重要。 如果網頁應用程序具有用戶身份驗證,就是使用HTTPS的最好的理由。 否則,用戶名和密碼將通過HTTP以純文本格式傳播。 這意味著如果用戶使用公共互聯網連接,並且他登錄您的應用程序,他很容易受到駭客偷襲。
重要的是不僅安全的登錄,密碼更改和支付頁面與HTTPS,以及整個應用程序。 以下說明,將指導完成所有必要的步驟,以正確保護您的Django應用程式。
建立一個SSL證書
第一步是為您的Django應用程式獲取SSL證書。 有幾個選項:您可以生成自己的證書,您可以從Let’s Encrypt獲得一個免費的證書,或者您可以從互聯網上的許多公司購買一個證書。
在本教程中,我將使用從Namecheap註冊的Positive SSL的簡單商業SSL證書。
產生一個CSR代碼
CSR代表證書簽名請求,它是一個通常在服務器端生成的base64編碼數據。因為我們將使用Nginx作為web服務器,我們將使用openssl。
通常CSR openssl配置默認包含如下內容:
公共名稱(應頒發域名證書)
國家
州(或省)
地點(或城市)
組織
組織單位(部)
電子郵件地址
請在ssh的terminal上執行下列指令來產生CSR代碼:
openssl req -new -newkey rsa:2048 -nodes -keyout simpleacademy.key -out simpleacademy.csr
請注意,simpleacademy可以改為自己網域的名字
接著輸入相關訊息:
Country Name (2 letter code) [AU]:TW State or Province Name (full name) [Some-State]:Taiwan Locality Name (eg, city) []:Taipei Organization Name (eg, company) [Internet Widgits Pty Ltd]:The Solar Systems Limited Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:simple.academy Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:Simple is Better Than Complex
完成後就會產生兩個檔案,CSR跟KEY兩個檔案。
然後可以到NameCheap的Positive SSL來啟動有效的SSL認證金鑰。其他內容不再多做說明
安裝有效SSL金鑰
將驗證過的CSR與KEY放置到ㄧ個目錄,例如:/etc/nginx/ssl。
接著修改virtualhost的設定。
upstream simple_academy_server { server unix:/opt/simple_academy/run/gunicorn.sock fail_timeout=0; } # Redirect all non-encrypted to encrypted server { server_name simple.academy; listen 80; return 301 https://simple.academy$request_uri; } server { server_name simple.academy; listen 443; # <- ssl on; # <- ssl_certificate /etc/nginx/ssl/simpleacademy_cert_chain.crt; # <-crt所在位置 ssl_certificate_key /etc/nginx/ssl/simpleacademy.key; # <-key所在位置 client_max_body_size 4G; access_log /opt/simple_academy/logs/nginx-access.log; error_log /opt/simple_academy/logs/nginx-error.log; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # <-這個很重要,記得加入 proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://simple_academy_server; break; } } }
這樣基本上就完成了!!