当前位置:   article > 正文

Django+Restful实现https进行通信介绍

Django+Restful实现https进行通信介绍

       最近在搞服务器相关的工作,服务器的框架使用的是Django,接口使用了Restfu api作为接口模块,其实如果不使用https而是使用http的话,其实就很简单了,这样的代码网上一大堆,随便找几个就可以实现简单的功能,所以本教程主要是介绍https的访问方法。我的开发环境是python3.6+Django2.1.7

       我大概说一下大致的原理,如果是普通的http协议进行url访问的话,数据包都是通过明文的方式进行传输的,如果使用抓包工具你可以抓到本次交互的所有明文信息;但是如果要使用https 的话就不一样了,抓包信息都是乱码信息。流程大致如下:

1、使用Django搭建一个简单的http服务,搭建完成后在网页中时间IP+端口号可以正常访问

备注:然后接下来配置https服务

2、在此基础上修改工程文件的setting文件,在里面添加如下代码

  1. SECURE_SSL_REDIRECT = True
  2. INSTALLED_APPS = [
  3. 'sslserver',
  4. 'werkzeug_debugger_runserver',
  5. 'django_extensions',
  6. ]

3、安装依赖包

  1. #pip3 install django-extensions
  2. #pip3 install django-werkzeug-debugger-runserver
  3. #pip3 install pyOpenSSL
  4. #pip3 install django-sslserver

4、寻找方法使用第三方软件生成公私钥对和证书(公钥封装一下就是证书)

如果大家没有证书,可以去我这儿下载证书,我这个证书是自己生成的,不是CA认证中心生成的,说白了就是没花钱的证书:

自建证书和私钥下载

(CSDN现在上传资源还无法设置积分了,想免费都不行,醉了。如果没有积分下载的话直接看备注1

5、然后在命令django的工程文件里面执行命令

python manage.py runsslserver --certificate /Users/KeycsrTest/development.crt --key /Users/KeycsrTest/development.key 0:8000

/Users/KeycsrTest/development.cr----修改成证书的路径

/Users/KeycsrTest/development.key----修改成私钥的路径

6、最后在web网页上用127.0.0.1:8000访问应该就是https访问了

你可以可以使用代码实现访问,代码如下:

  1. #encoding=utf-8
  2. import requests
  3. urltest = 'https://127.0.0.1:8000/'
  4. #因为证书是自建证书,不是CA中心颁发的证书,所以要设置verify=False,否则会报错
  5. res = requests.get(urltest, verify=False)

备注1:你也可以使用django-sslserver自带的证书启动服务,启动服务命令为:

python manage.py runsslserver 0:8000

这样服务起来后他会使用它自己默认的证书和自己默认的私钥。

备注2: 服务器配置好https后访问的流程是访问的时候首先先获取到服务器的证书,服务的证书获取到以后,访问端和服务端就会使用证书和服务器的私钥协商出一个会话对称密钥,以后的数据交互就使用这个会话密钥对数据进行加密和解密,所以在网络传输上就会是密文在进行传输,实现https的加密通信,当然这个只是https的单向认证,只是访问端认证了服务器端,但是这样已经可以了,至少数据传输过程中已经是加密的。如果服务器端还要认证终端的话,目前一般的做法是用户名和密码加登陆token的方式,只有登陆用户名和密码的访问者才可以访问服务器,这样就保证了双向认证。

有地方说的不对的,欢迎大家指正评论。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/727767
推荐阅读
相关标签
  

闽ICP备14008679号