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

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

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

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

配置证书

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

代码语言:javascript代码运行次数:0运行复制
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('.ps1'))

验证是否按照成功:

代码语言:javascript代码运行次数:0运行复制
choco --version

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

代码语言:javascript代码运行次数:0运行复制
choco install openssl -y

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

代码语言:javascript代码运行次数:0运行复制
choco cache clear --all

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

代码语言:javascript代码运行次数:0运行复制
choco install openssl --execution-timeout 15400 -y

验证是否按照成功:

代码语言:javascript代码运行次数:0运行复制
openssl version

生成自签名证书:

代码语言:javascript代码运行次数:0运行复制
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
    • 如果是个人证书,输入你的姓名。
  • 建议:如果是本地开发,输入 localhost

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

完整示例:

代码语言:javascript代码运行次数:0运行复制
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

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

代码语言:javascript代码运行次数:0运行复制
openssl x509 -in F:\全栈\certs\cert.pem -text -noout

Django 配置 https

Django 中安装依赖项:

代码语言:javascript代码运行次数:0运行复制
pip install django-extensions
pip install django-werkzeug-debugger-runserver
pip install pyOpenSSL
pip install service_identity

添加注册应用:

代码语言:javascript代码运行次数:0运行复制
INSTALLED_APPS = [
    ......
    'werkzeug_debugger_runserver',
    'django_extensions',
    ......

]

通过指定证书启动服务:

代码语言:javascript代码运行次数:0运行复制
 python manage.py runsslserver --certificate F:\全栈\certs\cert.pem --key F:\全栈\certs\key.pem

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

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

安装证书

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

代码语言:javascript代码运行次数:0运行复制
openssl x509 -in cert.pem -out cert.cer -outform DER

确实生成了 .cer 文件:

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

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

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

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

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

成功安装好证书:

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

代码语言:javascript代码运行次数:0运行复制
 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:

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

代码语言:javascript代码运行次数:0运行复制
start nginx.exe

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

停止 nginx

代码语言:javascript代码运行次数:0运行复制
nginx.exe -s stop

修改完后重新加载配置:

代码语言:javascript代码运行次数:0运行复制
nginx.exe -s reload

启动:

代码语言:javascript代码运行次数:0运行复制
daphne -b 127.0.0.1 -p 8001 YOLO_django.asgi:application

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-29,如有侵权请联系 cloudcommunity@tencent 删除djangonginx安全ssl协议

发布者:admin,转转请注明出处:http://www.yc00.com/web/1748086555a4728207.html

相关推荐

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

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

    2小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信