基于自签名证书的Django+MySQL项目安全加固

django 框架本身已经考虑了很多安全要素,在我们实现的django项目中,如果使用SSL安全协议,则用户端打开时便可用https协议进行安全连接。SSL协议在实现中证书是非常重要的,本文在Django中启用自签名证书(自签名SSL证书),步骤:

一,服务端的相关配置

  1. 生成自签名证书:详细步骤和原理参考博文:使用OpenSSL生成自签名证书
    在Django项目中,我们关注的是私钥和自签名证书,也可以按照以下方式生成:

    • 打开终端或命令提示符,并用“cd +目标目录”的方式导航到项目中存放生成证书的目标目录下。
    • 运行以下命令生成私钥文件(key.pem)和自签名证书文件(cert.pem):
      openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pem
      
  2. 在Django设置中配置HTTPS:

    • 打开Django项目的settings.py文件。
    • 在文件顶部导入os模块:
      import os
      
    • settings.py文件中添加以下设置: (可放到启动时实现)
      # 设置HTTPS协议
      os.environ['HTTPS'] = "on"
      
      # 设置自签名证书路径
      BASE_DIR = os.path.dirname(os.path.abspath(__file__))
      SSL_CERTIFICATE = os.path.join(BASE_DIR, 'cert.pem')
      SSL_KEY = os.path.join(BASE_DIR, 'key.pem')
      
      # 配置HTTPS服务器选项
      SERVER_OPTIONS = {
          'certfile': SSL_CERTIFICATE,
          'keyfile': SSL_KEY,
      }
      
      # 将HTTPS选项添加到ALLOWED_HOSTS中
      ALLOWED_HOSTS = ['yourdomain.com', 'localhost']
      
      # 修改DEBUG模式
      DEBUG = False  # 请根据你的环境配置
      
      请确保将yourdomain.com替换为你的域名或服务器的主机名。
  3. 运行Django开发服务器:

    • 打开终端或命令提示符。
    • 导航到你的Django项目的根目录。
    • 运行以下命令以在HTTPS模式下启动Django开发服务器:
      python manage.py runsslserver 0.0.0.0:8000 --settings=your_project.settings
      
      请将your_project.settings替换为你的Django项目的实际设置模块。

现在,Django应用程序将在HTTPS模式下运行,并使用自签名证书进行加密连接。请注意,由于自签名证书不是由受信任的第三方机构颁发的,因此在浏览器中可能会显示安全警告。

二,客户端的相关配置

把步骤一中服务器端对应的证书文件server.crt导入客户端浏览器中具体导入步骤因不同的操作系统而不同,
下面给出windows客户端的操作
方法一:

  1. 将服务器证书(.crt 或 .pem 格式)复制到客户端计算机上。
  2. 双击证书文件以打开证书视图。
  3. 在证书视图中,单击 “安装证书” 按钮。
  4. 在证书导入向导中,选择 “将证书存储到计算机”,然后单击 “下一步”。
  5. 选择 “受信任的根证书颁发机构” 作为证书存储位置,然后单击 “下一步”。
  6. 单击 “浏览”,选择 “受信任的根证书颁发机构” 存储位置,然后单击 “确定”。
  7. 单击 “下一步” 完成证书导入过程。
  8. 在安全警告对话框中,确认要导入证书,然后单击 “是”。

在 Windows 操作系统上,方法二:

  1. 将服务器证书(.crt 或 .pem 格式)复制到客户端计算机上(如c:\)。
  2. 使用管理员身份打开win中的cmd
  3. 运行命令:certutil -addstore root c:\scertificate.crt
    其中(c:\scertificate.crt 是签名文件所在的绝对路径,根据实际文件所在的情况输入)在这里插入图片描述

三, 具体案例应用以及测试

为了实现我们的项目安全,要启用https协议,而django默认使用的是http协议,如果需要https协议,需要在服务端进行安全加固,现在我们为了简化服务器端的配置(以上步骤一),使用安装第三方模块django-sslserver,在项目的根目录之下执行pip3 install django-sslserver,也可以按照下列方式在pycharm中安装

(一)安装第三方模块django-sslserver

在pycharm中直接安装,如图
在这里插入图片描述
安装成功:
在这里插入图片描述

(二)证书存放

接下来需要将上次创建的SSL 证书和密钥文件放置在Django项目中。为了方便我们将证书和密钥文件放置在您的 Django 项目根目录中,我这边是并将它们命名为 server.crt 和 server.key。
在这里插入图片描述

(三)settings 设置

打开settings.py文件,在INSTALLED_APPS下添加’sslserver’,如下图所示
在这里插入图片描述

(四) 启动https

在终端执行python3 manage.py runsslserver --cert server.crt --key server.key  192.168.5.128:8000命令启动服务,可以看到,这时候提示的服务地址变成了https://192.168.5.128:8000/,如下图所示

在这里插入图片描述

( 五)在浏览器端导入证书和测试

 按照以上(二,客户端的相关配置)中的方法导入证书后,接下来我们就可以使用浏览器访问该服务,由于我们的证书和密钥是自己创建的,因此浏览器会提示危险,点击高级、继续访问即可

在这里插入图片描述
在这里插入图片描述

如下图可以看到我们成功通过访问到了登录界面,并且使用的https,https基于 http 协议,但使用了 SSL/TLS 协议对通信进行加密。SSL/TLS 协议使用公钥和私钥来加密和解密数据,从而保证数据在传输过程中的安全性。
在这里插入图片描述

并且由当前页面跳转的都时基于https安全协议(如下图)
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值