配置CRL文件后Mosquitto拦截所有客户端连接该如何排查?
Mosquitto 2.0配置空CRL后客户端无法连接的解决方案
核心排查修复步骤
校验CRL格式是否为PEM格式
Mosquitto 2.x仅支持PEM格式的CRL文件,默认生成的DER格式会直接导致校验失败。执行以下命令验证格式:openssl crl -in /etc/mosquitto/certs/ca.crl -text -noout如果命令输出报错,说明格式错误,执行以下命令转为PEM格式:
openssl crl -inform DER -in /etc/mosquitto/certs/ca.crl -outform PEM -out /etc/mosquitto/certs/ca.crl.pem转换完成后将配置文件中
crlfile参数的路径修改为新的PEM格式文件路径即可。检查CRL文件的访问权限
Mosquitto默认以mosquitto用户运行,需要确保CRL文件对该用户有读权限:# 查看权限 ls -l /etc/mosquitto/certs/ca.crl # 修复权限 chown mosquitto:mosquitto /etc/mosquitto/certs/ca.crl chmod 644 /etc/mosquitto/certs/ca.crl确认CRL未过期
即使CRL内没有吊销任何证书,只要CRL本身超过了Next Update指定的有效期,Mosquitto会默认拒绝所有客户端连接。执行前述openssl crl查看命令,检查输出中的Next Update字段是否晚于当前时间,若已过期需要重新生成CRL文件。校验CRL签发CA一致性
必须保证配置的CRL是由cafile指定的CA签发,否则证书链校验会直接失败。可执行以下命令对比CA和CRL的公钥哈希:# 查看CA公钥哈希 openssl x509 -in /etc/mosquitto/certs/ca.crt -pubkey -noout | openssl md5 # 查看CRL签发者公钥哈希 openssl crl -in /etc/mosquitto/certs/ca.crl -pubkey -noout | openssl md5两个输出结果必须完全一致。
快速定位辅助手段
在Mosquitto配置文件中添加log_type all配置项,重启服务后执行journalctl -u mosquitto -f实时查看日志,可直接定位具体的报错原因,比如权限不足、CRL格式错误、CRL过期等明确提示。
内容的提问来源于stack exchange,提问作者Zharfan Zahisham
相关产品推荐
相关产品推荐

