惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
Project Zero
Project Zero
Google Online Security Blog
Google Online Security Blog
The Cloudflare Blog
L
LangChain Blog
T
Tenable Blog
GbyAI
GbyAI
C
Cybersecurity and Infrastructure Security Agency CISA
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
量子位
Cloudbric
Cloudbric
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
S
Securelist
S
Schneier on Security
F
Full Disclosure
Engineering at Meta
Engineering at Meta
A
Arctic Wolf
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Privacy International News Feed
宝玉的分享
宝玉的分享
A
About on SuperTechFans
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
H
Heimdal Security Blog
Y
Y Combinator Blog
月光博客
月光博客
H
Hacker News: Front Page
MongoDB | Blog
MongoDB | Blog
C
Check Point Blog
TaoSecurity Blog
TaoSecurity Blog
腾讯CDC
N
Netflix TechBlog - Medium

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
本地https/wss服务与SSL安全证书
种瓜 · 2018-09-03 · via 夜行人

文章目录

前言

我之前在分析scratch3.0与micro:bit的通信提到https校验问题:

由于网站都逐渐过渡到https,而Scratch Link是个本地websocker server,要让Scratch Link与浏览器通信,需要使用wss协议。而本地websocker server采用openssl本地自生成的证书的话,浏览器要让用户在一个新页面里点击高级设置才行,体验很不友好.
scratch团队的解决方案十分聪明, 让device-manager.scratch.mit.edu这个域名指向127.0.0.1,websocker server就可以使用这个域名的证书。

我觉得这个机制对大多数在本地提供https/wss服务的软件都有用,于是写篇文章将讨论如何实现Scratch Link的本地证书机制

问题的一般形式

这个问题极具一般性,我们先抛开Scratch Link,来描述下它的一般形式。

你在本地写了一个软件(native application),软件内跑了一个本地的https/wss服务。https要求ssl证书,于是你使用openssl生成了本地证书。当你在浏览器中访问https/wss服务时,浏览器会阻止你访问https/wss服务,并提醒你存在安全问题,直到你点击下图的所示的地方,才能继续访问https/wss服务。

解决方案

这个问题相信大多数开发者都遇见过。社区里也出了一些解决方案:

前头的两个解决方案最具代表性,但面向的都是开发者,本质上是修改了本地的系统配置。对于普通用户并不理想。

所以我们将给出一个面向普通用户的解决方案。

思路其实很简单: 使用你的域名申请到安全证书,申请到证书后,将证书放在本地软件里,用于本地的https/wss服务,将证书对应的域名指向127.0.0.1

操作步骤

我们接着来详细描述操作细节。

我选择从Let’s Encrypt获得证书

Let’s Encrypt的使用方法可以参考:使用Let’s Encrypt(certbot)为你的网站生成免费的 SSL 证书

完成上文的操作我们就获得了Let’s Encrypt为我们网站颁发的证书,证书位置在形如/etc/letsencrypt/live/xxx.example.com/的目录里。接着我们将证书从服务器拷贝出来,放到本地软件里,用于本地的https/wss服务。举例来说,我使用python-socketio提供https/wss服务,我的配置为

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
    app.on_startup.append(start_background_tasks)
    if use_ssl:
        ssl_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
        ssl_context.set_default_verify_paths()
        ssl_context.load_cert_chain(resource_path('./cert.pem'), resource_path('./privkey.pem'))
        web.run_app(
            app,
            host=SOCKET_SERVER_HOST,
            port=SOCKET_SERVER_PORT,
            ssl_context=ssl_context,
        )
    else:
        web.run_app(app, host=SOCKET_SERVER_HOST, port=SOCKET_SERVER_PORT)

配置好后重启本地软件,可以看到Chrome已经信任本地的https/wss服务了!

接下来我们来讨论一些细节问题。

安全提醒

我不建议不要将通配符证书打包在本地软件中,万一加密过程没做好,证书泄漏,容易造成安全问题,具体可能造成的风险参考:域名的SSL证书泄漏对网站的安全性影响大吗?,主要的风险是攻击者可以利用受信任的证书发起中间人攻击,获取到用户的数据。

所以我单独为一个二级域名申请证书,只用于127.0.0.1,如此一来,即便不加密证书,也不会造成大问题。但加密总归是好的。

证书更新

Let's Encrypt颁发的证书,有效期是3个月,离过期还有30天以内可以renew证书。我们每三个月在服务器上更新证书自然不成问题,但如何同步更新用户机器上的证书呢,我的建议是在软件上做自动更新功能,定期去同步服务器上的证书。

当然也可以定期更新软件本身, 我目前使用Pyinstaller来跨平台打包应用程序。所以可以选择PyUpdater来自动更新软件。

如果你觉得太麻烦,可以考虑购买一个长期的安全证书。

如何调试

如果我们在Chrome中已经同意继续前往127.0.0.1,短期内刷新,Chrome就不会再做安全提醒,我们要确定新的安全证书是否生效,需要重新启用警告功能

参考