Secure by Design:OpenPLC V4 的 TLS / JWT / 8443 与 WebSocket 调试
工业控制最怕两件事:明文暴露和越权操作。V3 的 Web 仪表盘是 HTTP 明文、靠网络隔离”假装安全”。V4 把安全做进了底座,这也是它敢叫”工业级”的底气之一。
图:V4 默认 TLS 全链路 + JWT 鉴权 + 安全 WebSocket 调试,告别 V3 明文 Web 仪表盘。
一、V3 vs V4 的安全模型
| 维度 | V3 | V4 |
|---|---|---|
| 管理通道 | HTTP :8080 明文 | HTTPS :8443 + TLS |
| 认证 | 弱/无强制 | JWT(JSON Web Token) |
| 调试 | Modbus TCP 明文路径 | 安全 WebSocket(变量监视 + 强制写入) |
| 前端 | 内置网页仪表盘 | 无 Web 前端,仅 REST API + Editor |
一句话:V3 靠”别把 8080 暴露到公网”来保安全;V4 默认就在传输层加密、在应用层鉴权。
二、TLS 全链路
V4 运行时监听 0.0.0.0:8443(HTTPS,自签证书)。笔者的 LuckFox 部署实测:https://192.168.5.2:8443 返回的是 REST 接口,证书为自签——内网用可接受,但若要跨公网管理,应换成可信 CA 签发的证书,否则仍是”加密但不可信”。
三、JWT 认证
所有管理操作走 JWT:Editor 登录后拿 token,后续 API 调用带 token。这意味着:
- 没有有效 token 不能上传程序、不能改配置、不能强制写变量;
- 调试通道(WebSocket)同样在鉴权之后才开放强制写入权限——避免”任何人都能强制置位输出”的灾难。
四、密码与 PEPPER
V4 的用户库(/var/lib/openplc-runtime/restapi.db)密码用 pbkdf2:sha256:600000 加盐哈希,盐里还混入来自 .env 的 PEPPER。运维要点:
- 默认
admin / ADMIN上线必须改; - 忘记密码可停服后直改 SQLite
users表重置(用generate_password_hash(pw + PEPPER)规则); - PEPPER 在
.env,备份配置时别忘了它,否则重置后的哈希对不上。
五、WebSocket 调试:便利与风险并存
安全 WebSocket 能做实时变量监视和强制写入(force),这对调试极爽,也是双刃剑:
- 只在该通道、且已鉴权时开放强制写;
- 生产环境应限制谁能连调试通道,避免误操作或恶意置位导致设备动作。
六、落地建议
- 内网自签证书够用,跨网务必换可信证书 + 反向代理做 TLS 终止与审计;
- 改默认口令、保管好
.env里的 PEPPER; - 调试通道权限收口,生产机考虑网络层 ACL 限制来源 IP;
- 把 V4 的这套”默认加密 + 默认鉴权”当作基线,而不是事后补丁。
→ 下一篇:插件系统实战,看怎么用 Python/C++ 扩出自己的 FB 与协议驱动。
配套代码与参考仓库
- OpenPLC Runtime v4(Autonomy-Logic,MIT):https://github.com/Autonomy-Logic/openplc-runtime
- OpenPLC Editor v4(Autonomy-Logic,GPL-3.0):https://github.com/Autonomy-Logic/openplc-editor
- 本系列配套示例(Docker Compose / 启保停 ST / GPIO 接线 / AI agent):https://gitcode.com/linjian19901122/openplc-v4-samples
- 自签证书生成、
PEPPER与用户库运维要点,见示例库security/
系列导航 · 双向链接(OpenPLC V4 系列 · 共 12 篇)
- ① 定位:从教学玩具到工业级 vPLC
- ② 协议栈变迁
- ③ 实战入门:Docker + 启保停
- ④ 树莓派 GPIO 与隔离
- ⑤ 编译器管线:MatIEC → STruC++
- ⑥ 安全设计:TLS/JWT/8443
- ⑦ 插件系统实战
- ⑧ AI 增强 PLC(预测性维护)
- ⑨ vPLC 与 Autonomy Edge
- ⑩ 实时性 vPLC:实验室→车间
- ⑪ 为什么选 SOEM(EtherCAT 主站)
- ⑫ Edge Control 机遇与挑战
本系列当前均为草稿(
draft: true)。建议发布序:① → ③ → ② → ④ → ⑧ 打头,⑩⑪⑫ 作深度延展按读者反馈穿插。