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

 更新时间:2021年04月30日 16:10:32   作者:大江狗  
本文总结了如何获得SSL证书并给Django项目配置HTTPS,建议先收藏再阅读,将来有一天你很可能会用到它。

为什么你的网站需要支持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。

无论哪个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的资料请关注脚本之家其它相关文章!

相关文章

  • flask中过滤器的使用详解

    flask中过滤器的使用详解

    这篇文章主要介绍了flask中过滤器的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Python爬虫爬取微信朋友圈

    Python爬虫爬取微信朋友圈

    这篇文章主要介绍了Python爬虫爬取微信朋友圈的方法,文中讲解非常细致,帮助大家更好的理解和学习Python爬虫,感兴趣的朋友可以了解下
    2020-08-08
  • 如何通过python实现人脸识别验证

    如何通过python实现人脸识别验证

    这篇文章主要介绍了如何通过python实现人脸识别验证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python 数据类型强制转换的总结

    python 数据类型强制转换的总结

    这篇文章主要介绍了python 数据类型强制转换的使用总结,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • Django 路由系统URLconf的使用

    Django 路由系统URLconf的使用

    这篇文章主要介绍了Django 路由系统URLconf的使用,详细的介绍了什么是URLconf以及如何使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Pycharm如何添加源与添加库

    Pycharm如何添加源与添加库

    这篇文章主要介绍了Pycharm如何添加源与添加库问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 浅析Python WSGI的使用

    浅析Python WSGI的使用

    WSGI也称之为web服务器通用网关接口,全称是web server gateway interface。这篇文章主要为大家介绍了Python WSGI的使用,希望对大家有所帮助
    2023-04-04
  • Python基于pywinauto实现的自动化采集任务

    Python基于pywinauto实现的自动化采集任务

    这篇文章主要介绍了Python基于pywinauto实现的自动化采集任务,模拟了输入单词, 复制例句, 获取例句, 清空剪切板, 然后重复这个操作,需要的朋友可以参考下
    2023-04-04
  • minpy使用GPU加速Numpy科学计算方式

    minpy使用GPU加速Numpy科学计算方式

    这篇文章主要介绍了minpy使用GPU加速Numpy科学计算方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • python爱心表白 每天都是浪漫七夕!

    python爱心表白 每天都是浪漫七夕!

    每天都是浪漫七夕!这篇文章主要为大家详细介绍了python爱心表白,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论