为内部OTS硬件设备配置TLS证书
很久以前,一位客户请我测试一款接入家庭网络提供服务的硬件设备。该设备通常通过HTTP的Web界面进行管理。测试时正值Chrome即将更新,新版本会突出显示HTTP访问和提交内容的安全风险。我与客户讨论了这一变化,询问他们是否有应对计划。
他们考虑过使用自签名证书,但这同样会显示安全警告,迫使用户忽略警告接受证书。由于该硬件旨在增强网络安全,这种做法显然不妥。
为此,我与TLS专家Scott Helme讨论后,设计出以下工作流程,使内部设备能获得有效的TLS证书。
参与方
- OTS:需要证书的现成硬件设备
- HQ:制造商
- LE:Let’s Encrypt
设置
制造商需要拥有一个专门用于OTS设备的域名,例如主域为ots.space,可使用ots-cert.space作为设备域。
工作流程
- OTS首次启动时生成随机令牌,并通过HTTPS将其与IP地址发送给HQ。
- HQ为设备生成唯一名称(如nifty-babbage)。
- HQ在设备域上为设备名称创建DNS记录(如nifty-babbage.ots-cert.space A 192.168.0.7)。
- HQ将名称返回给OTS。
- OTS生成私钥和CSR,发送给HQ。
- HQ使用CSR和LE的DNS验证为子域名生成证书。
- HQ创建包含证书和认证令牌的包。
- OTS轮询HQ检查包是否就绪,使用初始令牌作为标识。下载包后安装证书,并设置HTTP到HTTPS的重定向(如http://192.168.0.7重定向到https://nifty-babbage.ots-cert.space)。
- OTS每天检查证书有效期,到期前7天使用认证令牌请求新证书。设备重启时也执行此流程。
注意事项
- LE证书会提交到证书透明度日志,可能暴露设备名称,但无法关联到具体用户。
- 设备名称可自定义,但可能增加信息泄露风险。
- LE证书有效期为90天,设备长期离线后启动时会自动更新证书。
- 对于DHCP网络,IP变化时可更新DNS记录,短TTL可减少问题。
- 为防止DDoS,每日任务应随机时间执行。
- 生产时可预装客户端证书替代随机令牌,但需考虑长期有效性。
- 私钥仅在OTS生成,不会通过网络传输。
概念验证
本文提供了完整可运行的概念验证,设置简单,易于实施。