问题描述
我有两个 MQTT 服务器环境:PROD 和 PILOT。这些环境都有自己独立的证书颁发机构。我有一个客户端,它可以使用任一 CA 证书连接到每个环境。有没有可能把这两个CA文件合并成一个文件,这样我换环境的时候就不用在客户端修改CA文件了?
示例客户端:
mosquitto_sub -h server.com --cafile /path/to/ca.file
请注意,CA 文件也包含中间 CA。请参考我提到的 another post。
解决方法
从 man
页面:
--cafile
定义包含受信任的 PEM 编码 CA 证书的文件的路径。用于启用 SSL 通信。
注意复数形式的证书:-)
您的文件应该只包含信任锚 - 根 CA 证书。链中的其他证书应由服务器发送。您应该考虑重新配置您的服务器,以便按照 TLS 协议发送整个链(阅读certificate_list here)。
虽然它通常有效,但将中间证书放在信任锚存储中并无济于事。如果您要更新中间件(比根更经常发生),那么您将需要替换所有 客户端中的中间件。在您的情况下可能不是问题,但在现实世界中这是一个令人头疼的问题。此外,根据使用的库和开发人员编写客户端的方式,如果将中间件用作信任锚,它可能不会检查撤销。
--cafile
指向的文件应该是 PEM 编码的根 CA 证书的串联。