您的位置:首页 > 理论基础 > 计算机网络

Django配置Https访问

2020-02-04 01:06 459 查看

Django配置Https访问

  • 问题解决
  • 实际操作
  • 验证
  • 问题描述

    当小编开发完成django项目部署到后台时,忽然发现公司的服务器部署了ssl证书,所以前端获取到的页面都是以https开头的。然后问题出现了,当我修改好了ip等配置文件发起登录请求时,出现了如下错误:

    错误详情:net::ERR_SSL_PROTOCOL_ERROR send @ jquery-3.4.1.min.js:2 ajax @ jquery-3.4.1

    大体意思就是https页面不能访问非http请求
    这就很鸡贼了,哈哈哈,于是开始各种百度,这对于我这种小菜鸡来说还挺头疼的,但是问题总会有解决方法的哈!

    相关知识普及

    什么是http?

    超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

    什么是https?

    《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
    PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。

    http vs https

    无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
    无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
    基于请求和响应:基本的特性,由客户端发起请求,服务端响应
    简单快速、灵活
    通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

    问题解决

    问题分析

    出现该问题大概就是解决http与https两个页面与请求之间不互通的问题咯

    解决方案 1

    撤销服务器ssl证书,恢复http访问,但是这对于一个企业来说是不现实的。

    解决方案2

    增加django的https访问

    实际操作

    参考了 https://www.cnblogs.com/kusy/p/9560458.html

    1.下载创建ssl证书的工具
    本地下载
    链接: https://pan.baidu.com/s/1JDVMWit0CFLkgdVFX3K-Ag 提取码: ft5u 复制这段内容后打开百度网盘手机App,操作更方便哦
    2. 解压
    将下载的压缩包文件上传至服务器,解压到自己想存放的路径。
    3. 配置
    解压后找到解压目录的bin文件件,找到openssl.exe文件,双击打开指令窗口,输入如下指令进行配置,每执行一条指令,均需要配置相关参数,随意填写均可

    genrsa -des3 -out server.key 2048
    req -new -key server.key -out server.csr -config openssl.cnf
    rsa -in server.key -out server_no_passwd.key
    x509 -req -days 365 -in server.csr -signkey server_no_passwd.key -out server.crt

    此时就会在bin目录下生成了对应的crt证书文件。

    至此,自签名ssl证书创建完成。
    4. django配置
    下载配置ssl证书所需模块

    pip3 install django-extensions
    pip3 install django-werkzeug-debugger-runserver
    pip3 install pyOpenSSL

    配置INSTALLED_APPS 新增
    ‘werkzeug_debugger_runserver’,
    ‘django_extensions’,

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
    'corsheaders',
    'werkzeug_debugger_runserver',
    'django_extensions',
    ]

    验证

    重启服务

    启动指令不再是

    python manage.py runserver 0.0.0.0:8000

    而是

    python manage.py runserver_plus --cert server.crt 0.0.0.0:8000

    请求验证

    发起请求

    到此,问题得以解决。。。

    我是小菜鸡,不喜勿喷,如果描述错误的地方,欢迎各位大佬留言指正谢谢!!!

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    Lvan314 发布了9 篇原创文章 · 获赞 0 · 访问量 193 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: