Django配置Https访问
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
请求验证
发起请求
到此,问题得以解决。。。
我是小菜鸡,不喜勿喷,如果描述错误的地方,欢迎各位大佬留言指正,谢谢!!!
- 点赞
- 收藏
- 分享
- 文章举报
- centos+django+uwsgi+nginx配置ssl访问https服务器和网址
- Django项目配置让其他用户电脑访问Project
- 配置Nginx网站https访问、http共存访问
- 如何把网址配置为http和https可以同时访问
- Linux下nginx配置https协议访问的方法
- 给Tomcat配置HTTPS访问
- nginx配置免费的ssl证书,支持https安全访问
- Lighttpd 启用 HTTPS 并重定向 HTTP 为 HTTPS 访问配置
- 阿里云申请的免费证书,配置到Tomcat,实现https访问
- 【狼人杀plus全记录】SpringBoot配置SSL证书实现Https访问
- 配置Nginx以https方式访问
- web.xml中配置http访问转向https
- jetty 6.x https访问双向认证配置方法
- Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https? HTT
- nginx配置使用https方式访问
- Nginx下配置网站ssl实现https访问
- win2003 IIS 6.0实现全站https访问的配置方法
- 配置服务器支持https访问
- 在Apache配置https方式访问网站
- certbot在Centos7上配置合法签名证书,实现nginx的https访问