Django项目如何获得SSL证书与配置HTTPS


Posted in Python onApril 30, 2021

为什么你的网站需要支持HTTPS协议?

简而言之:HTTPS = HTTP + SSL = 更安全的数据传输

HTTP协议简称超文本传输协议,它广泛用于在Web浏览器和网站服务器之间传递信息。HTTP协议的缺点是它以明文方式发送内容(包括用户密码),不提供任何方式的数据加密。如果攻击者截取了Web浏览器和网站服务器之间的传输文本,就可以直接读取其中的信息。

为了解决这个隐患和保证数据的传输安全,HTTPS协议(安全套接字层超文本传输协议)诞生了。它在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信数据加密。

注意:HTTP协议默认使用的端口是80端口,HTTPS协议默认使用的端口是443端口。如果你使用云服务器,请确保设置安全组时已经开放了443端口。

如何在生产环境中部署Django项目时配置HTTPS?

一共分三步:

1. 购买下载SSL证书,通常包括一张证书(.cert或.pem)和一个私有密钥文件(.key)。

2. 修改Nginx或Apache配置信息,并上传下载颁发的SSL证书及key到指定文件夹

3. 修改Django配置文件settings.py

第一步:购买下载SSL证书

SSL证书有很多种, 级别越高越贵,网上的免费午餐并不多。对于个人网站使用单域名的DV SSL证书一般就够了,这种证书阿里云做活动期间是可以免费申请的。购买SSL证书时选择单域名-DV SSL-免费版即可,如下图所示。收费版的SSL证书价格比较便宜的还namecheap。

Django项目如何获得SSL证书与配置HTTPS

无论哪个SSL证书服务商最后都会提供证书下载链接或直接将证书发送到你的邮箱,只是流程不同而已。随后你需要将下载的证书上传到服务器指定文件夹,见下一步。

第二步:修改Nginx配置信息

在生产环境中部署Django时我们一般以Nginx做反向代理和静态文件服务器,这里简单说下Nginx的配置信息。Nginx配置文件通常位于/etc/nginx/conf.d目录下,修改配置文件添加SSL相关信息。

# /etc/nginx/conf.d目录下的配置文件
server {
listen 443 ssl; 监听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证书和私有密钥文件可以上传到服务器上任何一个指定目录,但通常做法是将其上传到Linux的/usr/share/nginx/ssl目录下,所以上述配置信息可以简化为:

# /etc/nginx/conf.d目录下的配置文件
server {
listen 443 ssl; 监听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请求永久地重定向至https。

server {
listen 80; # 监听80端口
server_name your_domain.com www.your_domain.com;
return 301 https://$server_name$request_uri; # 永久重定向
}

第三步 修改Django的settings.py

当你的网站支持https后,你可以在settings.py新增如下安全配置,可以给网站和用户数据提供更高级别的保护。这个设置也是django cookiecutter推荐的在生产环境中的默认配置。

# SECURITY安全设置 - 支持http时建议开启
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SECURE_SSL_REDIRECT = True # 将所有非SSL请求永久重定向到SSL
SESSION_COOKIE_SECURE = True # 仅通过https传输cookie
CSRF_COOKIE_SECURE = True # 仅通过https传输cookie
SECURE_HSTS_INCLUDE_SUBDOMAINS = True # 严格要求使用https协议传输
SECURE_HSTS_PRELOAD = True # HSTS为
SECURE_HSTS_SECONDS = 60
SECURE_CONTENT_TYPE_NOSNIFF = True # 防止浏览器猜测资产的内容类型

注意:Django的SECURE_SSL_REDIRECT = True也可实现80端口的http请求永久地重定向至https, 与Nginx的301重定向设置选其一即可。Django以上的几个安全设置均依赖下面这个SecurityMiddleware中间件。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
]

小结

Django项目上线时配置https非常简单,仅需3步。你学会了吗?

以上就是Django项目如何获得SSL证书与配置HTTPS的详细内容,更多关于Django 获得SSL证书与配置HTTPS的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用Python抓取模板之家的CSS模板
Mar 16 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
Apr 02 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
Jupyter Notebook折叠输出的内容实例
Apr 22 Python
Python select及selectors模块概念用法详解
Jun 22 Python
python 实现IP子网计算
Feb 18 Python
Python基础之常用库常用方法整理
Apr 30 #Python
Django 实现jwt认证的示例
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 #Python
python绘图subplots函数使用模板的示例代码
教你怎么用Python处理excel实现自动化办公
解决python绘图使用subplots出现标题重叠的问题
python数据库批量插入数据的实现(executemany的使用)
Apr 30 #Python
You might like
CakePHP框架Session设置方法分析
2017/02/23 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
发现的以前不知道的函数
2006/09/19 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python中实现常量(Const)功能
2015/01/28 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
wxPython多个窗口的基本结构
2019/11/19 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
什么是设计模式
2012/06/17 面试题
2015元旦标语横幅
2014/12/09 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
工程技术员岗位职责
2015/04/11 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers