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的Collections模块中counter结构的用法
Jul 07 Python
使用Python3 编写简单信用卡管理程序
Dec 21 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
opencv与numpy的图像基本操作
Mar 08 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
使用Python函数进行模块化的实现
Nov 15 Python
Python多进程编程常用方法解析
Mar 26 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 Python
pandas提升计算效率的一些方法汇总
May 30 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
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
ext 代码生成器
2009/08/07 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实现的最近最少使用算法
2015/07/10 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python实现识别手写数字大纲
2018/01/29 Python
解决python "No module named pip" 的问题
2018/10/13 Python
Python并行分布式框架Celery详解
2018/10/15 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
二年级学生评语大全
2014/04/23 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
2016党校培训心得体会
2016/01/07 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书