Django项目中怎么配置HTTPS,SSL证书如何获取
Admin 2022-06-13 群英技术资讯 795 次浏览
简而言之:HTTPS = HTTP + SSL = 更安全的数据传输
HTTP协议简称超文本传输协议,它广泛用于在Web浏览器和网站服务器之间传递信息。HTTP协议的缺点是它以明文方式发送内容(包括用户密码),不提供任何方式的数据加密。如果攻击者截取了Web浏览器和网站服务器之间的传输文本,就可以直接读取其中的信息。
为了解决这个隐患和保证数据的传输安全,HTTPS协议(安全套接字层超文本传输协议)诞生了。它在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信数据加密。
注意:HTTP协议默认使用的端口是80端口,HTTPS协议默认使用的端口是443端口。如果你使用云服务器,请确保设置安全组时已经开放了443端口。
一共分三步:
1. 购买下载SSL证书,通常包括一张证书(.cert或.pem)和一个私有密钥文件(.key)。
2. 修改Nginx或Apache配置信息,并上传下载颁发的SSL证书及key到指定文件夹
3. 修改Django配置文件settings.py
SSL证书有很多种, 级别越高越贵,网上的免费午餐并不多。对于个人网站使用单域名的DV SSL证书一般就够了,这种证书阿里云做活动期间是可以免费申请的。购买SSL证书时选择单域名-DV SSL-免费版即可,如下图所示。收费版的SSL证书价格比较便宜的还namecheap。
无论哪个SSL证书服务商最后都会提供证书下载链接或直接将证书发送到你的邮箱,只是流程不同而已。随后你需要将下载的证书上传到服务器指定文件夹,见下一步。
在生产环境中部署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; # 永久重定向 }
当你的网站支持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步。你学会了吗?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了python机器学习之线性回归详解,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下
利用(面向)对象的(属性和方法)去进行编码的过程即面向对象编程。本文将通过示例详细为大家介绍一下Python中的面向对象编程,需要的可以参考一下
Pygame是一组跨平台的 Python 模块,专为编写视频游戏而设计,您可以使用 pygame 创建不同类型的游戏,包括街机游戏、平台游戏等等,今天通过本文给大家介绍Pygame移动游戏角色的实现过程,一起看看吧
Python内置函数-hash() 函数。hash() 用于获取取一个对象(字符串或者数值等)的哈希值。
这篇文章主要介绍了pygame实现井字棋之第一步绘制九宫格,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008