Django 生成 ssl 安全证书,切换 https、wss协议(daphne 、nginx)
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。 - 如果不适用,可以直接按回车留空。
- 如果是 IT 部门,可以输入
- 建议:根据需要输入,或者留空。
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 反向代理、生成自签名证书并安装等等,相信对你也有所帮助。
感谢您的阅读!!!
相关文章:
Django 生成 ssl 安全证书,切换 https、wss协议(daphne 、nginx)
Django 普通 http 协议不够安全,无法支持连接本地摄像头(虽然在本地 localhost 上能连),此时需要切换成 https 协议(先提个醒,我这个方法最后失败了,不过对您应该也有帮助) 目录 配置…...
告别Win10强制更新:永久关闭系统更新指南
你是否厌倦了Win10在开关机时的强制自动更新?无论你是在赶时间还是专注于工作,那突如其来的更新提示总是让人不胜其烦。屏幕上那句“正在更新,请勿关闭电源”的提示,仿佛是对你无奈的嘲笑。别担心,今天我将教你如何永久…...
【django】2-1 (django配置) 应用配置、中间件配置、模板配置
文章目录 1 基本设置2 应用配置2.1 django核心应用2.2 常用第三方应用 3 中间件3.1 默认使用的中间件3.2 其它内置中间件3.3 第三方中间件3.4 中间件的执行顺序 4 模板引擎配置4.1 配置字典的键4.2 上下文处理器 创建django项目后,会自动生成初始的项目文件如下&…...
nginx-rtmp-module之ngx_rtmp.c代码详解
1. ngx_rtmp.c — RTMP模块的主逻辑实现 这个文件是 RTMP 模块的核心,包含了 RTMP 协议模块的初始化、配置解析和服务端口的管理等功能。它的主要职责是处理 RTMP 配置、初始化模块、配置事件、初始化 RTMP 端口等。 主要功能和逻辑: 模块初始化 (ngx_…...
罗杰斯特回归
定义 逻辑回归其实就是原来的线性回归加了激活函数,这个函数其实就是sigmoid函数,把一个回归的连续数值压缩到了0到1的空间,其实只要有函数能够满足把数值压缩到0,1之间就可以(因为0到1之间的数值就是概率值) 对于分类…...
Android 10.0 SystemUI状态栏去掉刘海屏功能实现
1.前言 在android10.0的系统rom定制化开发中,在一些产品中,对于带有刘海屏的产品中,会因为 刘海屏导致状态栏能显示图片的位置很小,然后会出现状态栏图标显示为白点的功能, 接下来看下问题怎么解决 2.SystemUI状态栏去掉刘海屏功能实现的核心类 frameworks/base/core/r…...
三维空间中点、线、面的关系
三维空间中点、线、面的关系 点相对于平面的位置关系直线相对于平面的位置关系1.根据三点计算平面方程 //根据3点计算平面方程#include <iostream> #include <cmath> #include <vector>...
【嵌入式学习2】C语言 - VScode环境搭建
目录 ## 语言分类 ## c语言编译器 ## VScode相关配置 ## 语言分类 编译型语言:C,C解释型语言:python,JS ## c语言编译器 分类GCC 系列MinGWCygwinMSVC系列一套编程语言编译器将GCC编译器和GNU Binutils移植到Win32平台下的产物…...
TCP/IP的网络连接设备
TCP/IP层物理层网卡、集线器、中继器数据链路层网桥、交换机网络层路由器传输层网关应用层 1.网桥:网桥主要功能是将一个网络的数据沿通信线路复制到另一个网络中去,可以有效的连接两个局域网 2.网关:网关又称协议转换器,是将两…...
蓝桥杯真题 2109.统计子矩阵
原题地址:1.统计子矩阵 - 蓝桥云课 问题描述 给定一个 NMNM 的矩阵 AA, 请你统计有多少个子矩阵 (最小 1111, 最大 NM)NM) 满足子矩阵中所有数的和不超过给定的整数 KK ? 输入格式 第一行包含三个整数 N,MN,M 和 KK. 之后 NN 行每行包含 MM 个整数, 代表矩阵 AA. 输出格…...
利用脚本和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张 角色及功能 管理员:登录、用户管理、餐桌信息管理、菜品类型管理、菜…...
Android开发BasePagerAdapter
Android开发BasePagerAdapter 有个基类的PagerAdapter 方便很多 public class BasePagerAdapter extends FragmentPagerAdapter {private static final String TAG "FragmentPagerAdapter";private static final boolean DEBUG false;private final FragmentMana…...
70. Linux驱动开发与裸机开发区别,字符设备驱动开发
一、裸机驱动开发回顾 1、底层,跟寄存器打交道,有些MCU提供了库。 二、Linux驱动开发思维 1、Linux下驱动开发直接操作寄存器不现实。 2、根据Linux下的各种驱动框架进行开发。一定要满足框架,也就是Linux下各种驱动框架的掌握。 3、驱动最…...
【博客节选】再谈Unity 的 root motion
节选自 【Unity实战笔记】第二十三 root motion变更方向攻击 (OnStateMove rootmotion rigidbody 使用的一些问题) 小伙伴们应该对root motion非常困惑,包括那个bake into pose。 当xz bake into pose后,角色攻击动画与父节点产…...
26考研——栈、队列和数组_栈(3)
408答疑 文章目录 一、栈1、栈(Stack)的概念和特点定义术语操作特性示例直观理解栈的基本操作初始化栈判断栈是否为空入栈操作出栈操作读取栈顶元素销毁栈 栈的数学性质 2、栈的顺序存储结构顺序栈的定义栈顶指针初始化注意事项 共享栈共享栈的操作共享栈…...
“十五五”时期航空弹药发展环境分析
1.“十五五”时期航空弹药发展环境分析 (标题:小二号宋体居中) 一、建言背景介绍 (一级标题:黑体三号,首行空两格) 航空弹药作为现代战争的核心装备,其发展水平直接关乎…...
桥接模式的优点和典型实现
桥接模式的优点 桥接模式通过将抽象部分与实现部分分离,使得它们可以独立变化,从而提高系统的灵活性和可扩展性。以下是桥接模式的主要优点: 分离抽象和实现: 桥接模式将抽象部分和实现部分分离,使得两者可以独立变化…...
Kotlin 协程官方文档知识汇总(一)
1、协程基础 Kotlin 是一门仅在标准库中提供最基本底层 API 以便其他库能够利用协程的语言。与许多其他具有类似功能的语言不同,async 与 await 在 Kotlin 中并不是关键字,甚至都不是标准库的一部分。此外,Kotlin 的挂起函数概念为异步操作提…...
删除字符串邻近的重复项
1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode) 对于字符串中字符的匹配或者删除等问题,通常会用到栈这个数据结构,要保持这样一个思路。 对于这道题,可以遍历字符串,用栈存储,一旦遇到…...
基于 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解决,比如…...
docker中间件部署
1.docker安装 # 1.卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 2.需要的安装包 yum install -y yum-utils# 3.设置镜像的仓库 # 3.1.默认是国外的&#x…...
LangChain4j(1):初识LangChain4j
1 什么是LangChain和LangChain4j LangChain是一个大模型的开发框架,使用LangChain框架,程序员可以更好的利用大模型的能力,大大提高编程效率。如果你是一个lava程序员,那么对LangChain最简单直观的理解就是,LangChain…...
基于 Swoole 的高性能 RPC 解决方案
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
Photoshop 2025安装包下载及Photoshop 2025详细图文安装教程
文章目录 前言一、Photoshop 2025安装包下载二、Photoshop 2025安装教程1.解压安装包2.运行程序3.修改安装路径4.设安装目录5.开始安装6.等安装完成7.关闭安装向导8.启动软件9.安装完成 前言 无论你是专业设计师,还是初涉图像处理的小白,Photoshop 2025…...
