Django 生成 ssl 安全证书,切换 https、wss协议(daphne 、nginx)

news2025/3/30 14:34:29

        Django 普通 http 协议不够安全,无法支持连接本地摄像头(虽然在本地 localhost 上能连),此时需要切换成 https 协议(先提个醒,我这个方法最后失败了,不过对您应该也有帮助)

目录

配置证书

Django 配置 https

安装证书

Nginx 反向代理


配置证书

打开终端管理员,安装choco 包管理器,输入安装命令:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

验证是否按照成功:

choco --version

下载 openssl(这里下载会很慢,请耐心等待):

choco install openssl -y

若下载失败或提示下载超时可以先清理缓存:

choco cache clear --all

然后再指定最大下载时间:

choco install openssl --execution-timeout 15400 -y

验证是否按照成功:

openssl version

生成自签名证书:

openssl req -newkey rsa:2048 -nodes -keyout F:\全栈\certs\key.pem -x509 -days 365 -out F:\全栈\certs\cert.pem

如果说找不到 openssl 的可以重新下完整版 openssl,参考这篇教程:

保姆级OpenSSL下载及安装教程,OpenSSL下载及安装教程-CSDN博客

安装成功后,再次输入生成签名证书脚本

以下是每个字段的含义及如何填写:


1. Country Name (2 letter code) [AU]:
  • 含义:国家代码,使用两个字母的 ISO 国家代码表示。
  • 示例
    • 如果你在中国,输入 CN
    • 如果你在澳大利亚,默认值为 AU,你可以直接按回车使用默认值。
  • 建议:输入你的国家代码,例如 CN

2. State or Province Name (full name) [Some-State]:
  • 含义:所在省或州的全名。
  • 示例
    • 如果你在北京,可以输入 Beijing
    • 如果在美国加州,可以输入 California
  • 建议:输入你所在的省或州的名称。

3. Locality Name (eg, city) []:
  • 含义:城市或地区名称。
  • 示例
    • 如果你在北京,输入 Beijing
    • 如果在纽约,输入 New York
  • 建议:输入你所在的城市名称。

4. Organization Name (eg, company) [Internet Widgits Pty Ltd]:
  • 含义:组织或公司名称。
  • 示例
    • 如果是个人使用,可以输入你的名字或留空(按回车)。
    • 如果是公司,可以输入公司名称,例如 MyCompany
  • 建议:根据需要输入,或者直接按回车使用默认值。

5. Organizational Unit Name (eg, section) []:
  • 含义:组织中的部门或单位名称。
  • 示例
    • 如果是 IT 部门,可以输入 IT Department
    • 如果不适用,可以直接按回车留空。
  • 建议:根据需要输入,或者留空。

6. Common Name (e.g., server FQDN or YOUR name) []:
  • 含义:这是最重要的字段之一,通常填写服务器的完全限定域名(FQDN)或你的姓名。
  • 示例
    • 如果是本地开发环境,可以输入 localhost
    • 如果是正式域名,输入你的域名,例如 example.com
    • 如果是个人证书,输入你的姓名。
  • 建议:如果是本地开发,输入 localhost

7. Email Address []:
  • 含义:联系邮箱地址。
  • 示例
    • 输入你的邮箱地址,例如 user@example.com
    • 如果不需要,可以直接按回车留空。
  • 建议:根据需要输入,或者留空。

完整示例:

Country Name (2 letter code) [AU]: CN
State or Province Name (full name) [Some-State]: Beijing
Locality Name (eg, city) []: Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]: MyCompany
Organizational Unit Name (eg, section) []: IT Department
Common Name (e.g., server FQDN or YOUR name) []: localhost
Email Address []: user@example.com

然后就会在指定目录下创建 私钥文件 和 证书文件 ,输入以下命令可查看生成的证书内容:

openssl x509 -in F:\全栈\certs\cert.pem -text -noout

Django 配置 https

Django 中安装依赖项:

pip install django-extensions
pip install django-werkzeug-debugger-runserver
pip install pyOpenSSL
pip install service_identity

添加注册应用:

INSTALLED_APPS = [
    ......
    'werkzeug_debugger_runserver',
    'django_extensions',
    ......

]

通过指定证书启动服务:

 python manage.py runsslserver --certificate F:\全栈\certs\cert.pem --key F:\全栈\certs\key.pem

控制台显示使用了自签名证书及其密钥。

发现虽然能启动 https ,但是会提示不安全。

安装证书

        解决方法,将自定义安全证书放入浏览器中。终端进入生成证书的目录,将 PEM 格式的证书文件 (cert.pem) 转换为 DER 格式的证书文件 (cert.cer)。如果命令执行成功,你会在当前目录下生成一个名为 cert.cer 的文件,命令如下:

openssl x509 -in cert.pem -out cert.cer -outform DER

确实生成了 .cer 文件:

将证书导入客户端浏览器(基于 windows):

1、双击 .cer 证书,点击安装证书

2、选择将证书存储到"本地计算机",然后点击下一步

3、选择“受信任的根证书颁发机构”作为存储位置,点击确定

4、点击完成,证书成功被导入

成功安装好证书:

虽然是能调用摄像头了,说明 https 协议确实生效了,因为 http 协议在 web 端不允许通过路由跳转调用本地摄像头,只能本地,但是 websocket 却连接不上了。

 python manage.py runsslserver --certificate F:\全栈\certs\cert.pem --key F:\全栈\certs\key.pem

可能这个命令无法启动 asgi,所以我们在 daphne 中启用 HTTPS WSS,但是 daphne 不支持--cert-file--key-file 参数。这些参数是 runsslserver 提供的功能,而 daphne 并未内置对 SSL/TLS 的支持。

Nginx 反向代理

使用 Nginx 作为反向代理

下载地址:nginx: download

启动 Nginx:

定位到刚才下载的安装包的解压路径,输入:

start nginx.exe

打开http://localhost/ 的url,你会看见欢迎页面:

停止 nginx

nginx.exe -s stop

修改完后重新加载配置:

nginx.exe -s reload

启动:

daphne -b 127.0.0.1 -p 8001 YOLO_django.asgi:application

可以看见成功进行消费者,然而,还是 连不上 websocket ,困惑一周,已放弃本思路。

        目前暂时先这样,算是烂尾了,有大佬有更好的建议可以说哦,下一篇更 localhost 调用电脑摄像头,虽然本篇烂尾了,但也学到很多东西,比如 nginx 反向代理、生成自签名证书并安装等等,相信对你也有所帮助。

感谢您的阅读!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2322489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告别Win10强制更新:永久关闭系统更新指南

你是否厌倦了Win10在开关机时的强制自动更新?无论你是在赶时间还是专注于工作,那突如其来的更新提示总是让人不胜其烦。屏幕上那句“正在更新,请勿关闭电源”的提示,仿佛是对你无奈的嘲笑。别担心,今天我将教你如何永久…

罗杰斯特回归

定义 逻辑回归其实就是原来的线性回归加了激活函数,这个函数其实就是sigmoid函数,把一个回归的连续数值压缩到了0到1的空间,其实只要有函数能够满足把数值压缩到0,1之间就可以(因为0到1之间的数值就是概率值) 对于分类…

【嵌入式学习2】C语言 - VScode环境搭建

目录 ## 语言分类 ## c语言编译器 ## VScode相关配置 ## 语言分类 编译型语言:C,C解释型语言:python,JS ## c语言编译器 分类GCC 系列MinGWCygwinMSVC系列一套编程语言编译器将GCC编译器和GNU Binutils移植到Win32平台下的产物…

利用脚本和Shader制作屏幕后处理效果

一、屏幕后处理的实现原理 该屏幕后处理的原理是将渲染完成后的屏幕纹理通过脚本和Shader完成一些操作,然后实现各种屏幕效果 而实现屏幕后处理效果的主要操作就是获得当下渲染完成后的屏幕图像,其中unity提供了一个函数用于获取此图像——OnRenderIma…

【银河麒麟系统常识】命令:uname -m(查看系统架构)

命令: uname -m 功能 常用的 Linux/Unix 终端命令,用于显示当前系统的硬件架构; 返回 返回系统的CPU架构类型,用于判断软件兼容性; 输出结果架构说明常见设备x86_64Intel/AMD 64位 CPU主流 PC、服务器aarch64ARM 64位 …

3.1.2 内存池

文章目录 3.1.2 内存池1. 什么是内存池2. 内存管理1. 定长2. 不定长3. jemalloc4. tcmalloc 3.1.2 内存池 1. 什么是内存池 内存池(Memory Pool) 是一种 预先分配 一块大内存,然后按需分配和回收 其中小块内存的技术。它的本质是管理一块连续…

基于SpringBoot + Vue 的餐厅点餐管理系统

SpringBootVue餐厅点餐管理系统 技术框架 后端:springboot mybatisPlus前端:Vue2 elementUI数据库:mysql项目构建工具:maven 数据库表 14张 角色及功能 管理员:登录、用户管理、餐桌信息管理、菜品类型管理、菜…

【博客节选】再谈Unity 的 root motion

节选自 【Unity实战笔记】第二十三 root motion变更方向攻击 (OnStateMove rootmotion rigidbody 使用的一些问题) 小伙伴们应该对root motion非常困惑,包括那个bake into pose。 当xz bake into pose后,角色攻击动画与父节点产…

26考研——栈、队列和数组_栈(3)

408答疑 文章目录 一、栈1、栈(Stack)的概念和特点定义术语操作特性示例直观理解栈的基本操作初始化栈判断栈是否为空入栈操作出栈操作读取栈顶元素销毁栈 栈的数学性质 2、栈的顺序存储结构顺序栈的定义栈顶指针初始化注意事项 共享栈共享栈的操作共享栈…

基于 mxgraph 实现流程图

mxgraph 可以实现复杂的流程图绘制。mxGraph里的Graph指的是图论(Graph Theory)里的图而不是柱状图、饼图和甘特图等图(chart),因此想找这些图的读者可以结束阅读了。 作为图论的图,它包含点和边,如下图所示。 交通图 横道图 架构图 mxGrap…

动态路由机制MoE专家库架构在多医疗AI专家协同会诊中的应用探析

随着医疗人工智能技术的飞速进步,AI在医学领域的应用日益增多,尤其是在复杂疾病的诊断和治疗中,AI技术的应用带来了巨大的潜力。特别是动态路由机制混合专家(Mixture of Experts,MoE)架构,因其灵活、高效的特点,正逐渐成为实现多AI专家协同会诊的关键技术。通过将多个不…

双工通信:WebSocket服务

(一)WebSocket概述 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输 注意;Websocket也只能由客户端先握…

洪水灌溉算法 + 总结

文章目录 floodfill算法图像渲染题解代码 岛屿数量题解代码 岛屿的最大面积题解代码 被围绕的区域题解代码 太平洋大西洋水流问题题解代码 扫雷游戏题解代码 衣橱整理题解代码 总结 floodfill算法 1. 寻找相同性质的联通块,可以使用dfs或者bfs解决,比如…

LangChain4j(1):初识LangChain4j

1 什么是LangChain和LangChain4j LangChain是一个大模型的开发框架,使用LangChain框架,程序员可以更好的利用大模型的能力,大大提高编程效率。如果你是一个lava程序员,那么对LangChain最简单直观的理解就是,LangChain…

Photoshop 2025安装包下载及Photoshop 2025详细图文安装教程

文章目录 前言一、Photoshop 2025安装包下载二、Photoshop 2025安装教程1.解压安装包2.运行程序3.修改安装路径4.设安装目录5.开始安装6.等安装完成7.关闭安装向导8.启动软件9.安装完成 前言 无论你是专业设计师,还是初涉图像处理的小白,Photoshop 2025…

SQL Server安装程序无法启动:系统兼容性检查失败

问题现象: 运行 SQL Server 2022 安装程序时,提示 “硬件或软件不满足最低要求”,安装向导直接退出或无法继续。 快速诊断 操作系统版本检查: # 查看 Windows 版本(需 20H2 或更高) winver 支持的系统&…

期权合约作废的话,权利金和保证金会退还么?

在期权交易中,权利金是否可以退回,主要取决于期权的交易情况和合约条款。 期权作废的三种情形 一般来说期权作废一共有三种情况,分别是到期没有行权、主动放弃或者是标的退市了。 第一种是到期未行权,一般来说值得都是虚值期权&…

MIPI计算ECC和CRC工具介绍

一、MIPI简介 MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟。MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。MIPI官网https://mipi.org/…

医院管理系统(源码)分享

「医院管理系统(源码) 源码: https://pan.quark.cn/s/b6e21488fce3 第1章 绪论 1.1 项目背景 随着计算机科学的迅猛发展和互联网技术的不断推进,人们的生活方式发生了巨大的变化,同时也推动了整个软件产业的发展。把…

使用Geotools从DEM数据中读取指定位置的高程实战

目录 前言 一、GridCoverage2D对象介绍 1、GridCoverage2D的属性 2、GridCoverage2D核心方法 3、GridCoverage2D中的高级操作 二、指定位置的高程获取 1、存储原理 2、相关属性的获取 3、获取高程的方法 三、总结 前言 在地理信息科学领域,高程数据是至关重…