侧边栏壁纸
博主头像
鱼箴日记,AI,Java,Liunx,Spring,Spring AI博主等级

行动起来,活在当下

  • 累计撰写 17 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

nginx + WebSocket + mTLS 证书体系设计(机器人/IoT 实战总结)

Administrator
2026-05-22 / 0 评论 / 0 点赞 / 3 阅读 / 5649 字 / 正在检测是否收录...

在机器人、IoT、AGV 等设备通信系统中,常见架构如下:

机器人(Client)
    ↓  WSS / HTTPS / MQTT TLS
nginx(网关)
    ↓  HTTP / TCP
SpringBoot / Netty 服务

在这个体系中,证书通常分为两类:

  • 服务端证书(公网 CA 购买)

  • 客户端证书(企业自签 CA)

本文总结 nginx + 双向 TLS(mTLS)在实际工程中的完整设计方式。


一、TLS 两种模式

1. 单向 TLS(HTTPS / WSS)

只有客户端验证服务端:

客户端 → 验证 → 服务端证书

特点:

  • 服务端必须有证书

  • 客户端无需证书

  • 浏览器天然支持

  • 部署简单

适用于:

  • Web 网站

  • 普通 API

  • 浏览器 WebSocket


2. 双向 TLS(mTLS)

双方互相验证:

客户端 ↔ 验证 ↔ 服务端

特点:

  • 服务端验证客户端身份

  • 客户端验证服务端身份

  • 安全性更高

  • 适用于设备通信

适用于:

  • 机器人

  • IoT 设备

  • MQTT / WebSocket

  • 工业控制系统


二、证书体系设计(核心)

1. 服务端证书(公网 CA)

推荐使用:

  • DigiCert

  • GlobalSign

  • Let's Encrypt

用途:

  • nginx 对外 HTTPS / WSS

  • 浏览器信任

  • 防止中间人攻击


2. 客户端证书(企业 CA)

客户端证书不建议购买公网 CA,而是:

企业自建 CA

原因:

  • 客户端身份属于企业内部体系

  • 需要自定义设备ID(robot-001)

  • 可控性更强

结构:

robot-ca
 ├── robot-001
 ├── robot-002
 └── robot-003

三、nginx 证书配置

1. 服务端证书(公网)

ssl_certificate     server.crt;
ssl_certificate_key server.key;

2. 客户端证书验证(mTLS)

ssl_client_certificate robot-ca.crt;
ssl_verify_client on;

关键点:

  • nginx 信任的是 CA,不是单个客户端证书

  • 所有机器人必须由该 CA 签发


四、机器人客户端证书

每个机器人拥有独立身份:

robot-001.p12
robot-002.p12

内容包含:

  • client certificate

  • private key

推荐格式:

PKCS12 (.p12)

五、证书生成流程(OpenSSL)

1. 创建 CA

openssl genrsa -out robot-ca.key 4096

openssl req -x509 -new -nodes \
-key robot-ca.key \
-out robot-ca.crt \
-days 3650

2. 生成机器人证书

openssl genrsa -out robot-001.key 2048

openssl req -new \
-key robot-001.key \
-out robot-001.csr

3. CA 签发客户端证书

openssl x509 -req \
-in robot-001.csr \
-CA robot-ca.crt \
-CAkey robot-ca.key \
-CAcreateserial \
-out robot-001.crt \
-days 3650

4. 转换为 p12(推荐 Java 使用)

openssl pkcs12 -export \
-in robot-001.crt \
-inkey robot-001.key \
-out robot-001.p12

六、客户端与 nginx 使用关系

nginx 使用:

类型

文件

服务端证书

server.crt / server.key

客户端 CA

robot-ca.crt


机器人使用:

类型

文件

客户端证书

robot-001.p12


七、关键设计原则

1. nginx 不绑定单个客户端证书

错误做法:

ssl_verify_client on + robot-001.crt

正确做法:

ssl_verify_client on + robot-ca.crt

2. 客户端证书代表身份

robot-001.p12 = robot-001 身份

3. 服务端证书必须公网可信

避免:

  • 浏览器报错

  • 客户端额外配置CA


八、完整通信流程

单向 TLS

机器人 → 验证 nginx → 建立连接

双向 TLS

机器人 → 验证 nginx
nginx   → 验证 robot
→ 建立双向信任连接

九、企业推荐架构

1. 浏览器 / 前端

HTTPS(单向 TLS)

2. 机器人 / IoT

mTLS(双向 TLS)
+ 设备证书体系

3. 内网服务

HTTP + 内网隔离

十、总结

在机器人/IoT系统中:

✔ 服务端证书(公网 CA)

用于对外通信可信性

✔ 客户端证书(企业 CA)

用于设备身份认证

✔ nginx

作为 TLS 终止 + 认证网关

0

评论区