在机器人、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 36502. 生成机器人证书
openssl genrsa -out robot-001.key 2048
openssl req -new \
-key robot-001.key \
-out robot-001.csr3. CA 签发客户端证书
openssl x509 -req \
-in robot-001.csr \
-CA robot-ca.crt \
-CAkey robot-ca.key \
-CAcreateserial \
-out robot-001.crt \
-days 36504. 转换为 p12(推荐 Java 使用)
openssl pkcs12 -export \
-in robot-001.crt \
-inkey robot-001.key \
-out robot-001.p12六、客户端与 nginx 使用关系
nginx 使用:
机器人使用:
七、关键设计原则
1. nginx 不绑定单个客户端证书
错误做法:
ssl_verify_client on + robot-001.crt正确做法:
ssl_verify_client on + robot-ca.crt2. 客户端证书代表身份
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 终止 + 认证网关
评论区