您好,登錄后才能下訂單哦!
Django項(xiàng)目如何獲得SSL證書?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
簡(jiǎn)而言之:HTTPS = HTTP + SSL = 更安全的數(shù)據(jù)傳輸
HTTP協(xié)議簡(jiǎn)稱超文本傳輸協(xié)議,它廣泛用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息。HTTP協(xié)議的缺點(diǎn)是它以明文方式發(fā)送內(nèi)容(包括用戶密碼),不提供任何方式的數(shù)據(jù)加密。如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸文本,就可以直接讀取其中的信息。
為了解決這個(gè)隱患和保證數(shù)據(jù)的傳輸安全,HTTPS協(xié)議(安全套接字層超文本傳輸協(xié)議)誕生了。它在HTTP的基礎(chǔ)上加入了SSL協(xié)議,SSL依靠證書來驗(yàn)證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信數(shù)據(jù)加密。
注意:HTTP協(xié)議默認(rèn)使用的端口是80端口,HTTPS協(xié)議默認(rèn)使用的端口是443端口。如果你使用云服務(wù)器,請(qǐng)確保設(shè)置安全組時(shí)已經(jīng)開放了443端口。
一共分三步:
1. 購買下載SSL證書,通常包括一張證書(.cert或.pem)和一個(gè)私有密鑰文件(.key)。
2. 修改Nginx或Apache配置信息,并上傳下載頒發(fā)的SSL證書及key到指定文件夾
3. 修改Django配置文件settings.py
SSL證書有很多種, 級(jí)別越高越貴,網(wǎng)上的免費(fèi)午餐并不多。對(duì)于個(gè)人網(wǎng)站使用單域名的DV SSL證書一般就夠了,這種證書阿里云做活動(dòng)期間是可以免費(fèi)申請(qǐng)的。購買SSL證書時(shí)選擇單域名-DV SSL-免費(fèi)版即可,如下圖所示。收費(fèi)版的SSL證書價(jià)格比較便宜的還namecheap。
無論哪個(gè)SSL證書服務(wù)商最后都會(huì)提供證書下載鏈接或直接將證書發(fā)送到你的郵箱,只是流程不同而已。隨后你需要將下載的證書上傳到服務(wù)器指定文件夾,見下一步。
在生產(chǎn)環(huán)境中部署Django時(shí)我們一般以Nginx做反向代理和靜態(tài)文件服務(wù)器,這里簡(jiǎn)單說下Nginx的配置信息。Nginx配置文件通常位于/etc/nginx/conf.d目錄下,修改配置文件添加SSL相關(guān)信息。
# /etc/nginx/conf.d目錄下的配置文件 server { listen 443 ssl; 監(jiān)聽443端口 ssl_certificate /path/to/certificate/your_domain_chain.crt; # 證書地址 ssl_certificate_key /path/to/your_private.key; # 私有密鑰文件地址 server_name your_domain.com www.your_domain.com; # 域名 }
SSL證書和私有密鑰文件可以上傳到服務(wù)器上任何一個(gè)指定目錄,但通常做法是將其上傳到Linux的/usr/share/nginx/ssl目錄下,所以上述配置信息可以簡(jiǎn)化為:
# /etc/nginx/conf.d目錄下的配置文件 server { listen 443 ssl; 監(jiān)聽443端口 ssl_certificate /usr/share/nginx/ssl/your_domain_chain.crt; # 證書地址 ssl_certificate_key /usr/share/nginx/ssl/your_private.key; # 私有密鑰文件地址 server_name your_domain.com www.your_domain.com; # 域名 }
你還可以將所有來自80端口的http請(qǐng)求永久地重定向至https。
server { listen 80; # 監(jiān)聽80端口 server_name your_domain.com www.your_domain.com; return 301 https://$server_name$request_uri; # 永久重定向 }
當(dāng)你的網(wǎng)站支持https后,你可以在settings.py新增如下安全配置,可以給網(wǎng)站和用戶數(shù)據(jù)提供更高級(jí)別的保護(hù)。這個(gè)設(shè)置也是django cookiecutter推薦的在生產(chǎn)環(huán)境中的默認(rèn)配置。
# SECURITY安全設(shè)置 - 支持http時(shí)建議開啟 SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") SECURE_SSL_REDIRECT = True # 將所有非SSL請(qǐng)求永久重定向到SSL SESSION_COOKIE_SECURE = True # 僅通過https傳輸cookie CSRF_COOKIE_SECURE = True # 僅通過https傳輸cookie SECURE_HSTS_INCLUDE_SUBDOMAINS = True # 嚴(yán)格要求使用https協(xié)議傳輸 SECURE_HSTS_PRELOAD = True # HSTS為 SECURE_HSTS_SECONDS = 60 SECURE_CONTENT_TYPE_NOSNIFF = True # 防止瀏覽器猜測(cè)資產(chǎn)的內(nèi)容類型
注意:Django的SECURE_SSL_REDIRECT = True也可實(shí)現(xiàn)80端口的http請(qǐng)求永久地重定向至https, 與Nginx的301重定向設(shè)置選其一即可。Django以上的幾個(gè)安全設(shè)置均依賴下面這個(gè)SecurityMiddleware中間件。
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', ]
看完上述內(nèi)容,你們掌握Django項(xiàng)目如何獲得SSL證書的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。