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多线程下载文件的方法
Jul 10 Python
Python利用operator模块实现对象的多级排序详解
May 09 Python
python opencv之分水岭算法示例
Feb 24 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
基于python log取对数详解
Jun 08 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
python判断完全平方数的方法
Nov 13 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 Python
如何教少儿学习Python编程
Jul 10 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 Python
python简单实现插入排序实例代码
Dec 16 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的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
php权重计算方法代码分享
2014/01/09 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
Python求出0~100以内的所有素数
2018/01/23 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
Python 必须了解的5种高级特征
2020/09/10 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
高山背包:High Sierra
2017/11/23 全球购物
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
自荐信怎么写呢?
2013/12/09 职场文书
大学生职业生涯规划范文
2014/01/22 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
班主任对学生的评语
2014/04/26 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
css3 选择器
2022/05/11 HTML / CSS
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python