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基于xml parse实现解析cdatasection数据
Sep 30 Python
python通过正则查找微博@(at)用户的方法
Mar 13 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
基于Python的关键字监控及告警
Jul 06 Python
python分布式环境下的限流器的示例
Oct 26 Python
Python实现的计算器功能示例
Apr 26 Python
python连接mongodb密码认证实例
Oct 16 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
Django 缓存配置Redis使用详解
Jul 23 Python
Python Django Cookie 简单用法解析
Aug 13 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 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
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
vue项目中使用百度地图的方法
2018/06/08 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
Python制作爬虫抓取美女图
2016/01/20 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
Python基于百度云文字识别API
2018/12/13 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
Python将string转换到float的实例方法
2019/07/29 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
材料员岗位职责
2014/03/13 职场文书
老干部工作汇报材料
2014/10/28 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
以下牛机,你有几个
2022/04/05 无线电