Debian11下Mosquitto 2.0.14配置CRL后拒绝所有连接求助
问题:Debian 11上Mosquitto 2.0.14启用CRL后拒绝所有连接
环境信息
- 系统:Debian 11
- Mosquitto版本:2.0.14
- 认证方式:证书认证,计划启用CRL校验
配置文件(/etc/mosquitto/conf.d/my.conf)
per_listener_settings true listener 8883 bind_address 0.0.0.0 #bind_port = 8883 allow_anonymous false cafile /etc/mosquitto/ca_certificates/ca.cert keyfile /etc/mosquitto/certs/mqtt-server.key certfile /etc/mosquitto/certs/mqtt-server.crt require_certificate true use_subject_as_username true crlfile /etc/mosquitto/my-crlfile
错误现象
添加crlfile配置项后,客户端连接时报错:
OpenSSL Error[0]: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca
服务器端对应报错:
OpenSSL Error[0]: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed
移除crlfile项后,连接恢复正常。
CRL文件信息
CRL文件(/etc/mosquitto/my-crlfile)内容:
-----BEGIN X509 CRL----- MIIDPjCCASYCAQEwDQYJKoZIhvcNAQELBQAwVzEOMAwGA1UEChMFTXlPcmcxDzAN BgNVBAcTBlZpZW5uYTEPMA0GA1UECBMGVmllbm5hMQswCQYDVQQGEwJBVDEWMBQG A1UEAxMNTXlPcmcgUm9vdCBDQRcNMjIwNzIyMTAxMDU3WhcNMjIwNzIzMTAxMDU3 WqCBmjCBlzCBlAYDVR0jBIGMMIGJgBSiMiQ26pLZIWDqD3cCWCr82RWSx6FbpFkw VzEWMBQGA1UEAwwNTXlPcmcgUm9vdCBDQTELMAkGA1UEBhMCQVQxDzANBgNVBAgM BlZpZW5uYTEPMA0GA1UEBwwGVmllbm5hMQ4wDAYDVQQKDAVNeU9yZ4IUerRHIXQ7 sz+ayrjVYb4o7kxhnA4wDQYJKoZIhvcNAQELBQADggIBAHkRs0zgBc1XBUV2F+uC MW2Y8dlVGq+rOuoyT+i8hCrnK5M4WdwB5Nks20Ytr+qFAqdeJCoz5HXZSly3Xn+C x0q65Z4qOat4ivMakG3ha3jDwsdWo+av405XBsGcoT55ZWfStiF5HcwHqZoPfTYv BhWLEJfobLwzmI4vgSabJVwdhMJGrtRBi2pErYarq3q+8tEJDuGKJ1w3SgrqgcF2 1ZzDcE1CpO/LWRTXdR08ggRRviAIOJhYrxusf4sPDpOVOx9HvtzN0TotLic3ldQG z8027pddwiUWn96sgJd8F28DrHD6Lp+SClIEXlzGdVuk0YyUc9pf8H+esZfMa8B3 dMws6s3eB6M9mZr13iLrzpkGjPP/StoGGT5rbp7xrLdynYfcsvCdbUeOV4AbG6UE FIVo0OKXrS50fIxy7B/MbMIljjCzAVM3OWdwJ7YZv+ympH50/RookrT51HvKOT5l hEwQovivfiKL0ts/X//wE0sF5TIsefp1Uavr1BQIepePRN85NeKW3Muo43zpdJzS d6btBkQmdyXMhqaO6VjJBE6ov0hKfgBq+egPvxCx9IoFNIHdJBfm47lP7mzqMdbr 5QATcTQ95XdwEwPG0DYxn0hSfkMlQd/H6AVJSYSNOFP7+4Y5NYQO9SiveHu1MQge ozOMF1cdGCZxmprVmQ+wV5bm -----END X509 CRL-----
该文件目前未包含吊销证书,添加吊销证书后问题依旧。CRL由Java应用生成,下次更新时间为未来1天,上次更新时间为过去1天。
OpenSSL验证结果
- 未加
-crl_check参数时验证通过:
openssl verify -CRLfile ../MyOrg.crl -CAfile ../MyOrg-RootCA.crt -verbose my.cert my.cert: OK
- 添加
-crl_check参数后验证失败:
openssl verify -crl_check -CRLfile ../MyOrg.crl -CAfile ../MyOrg-RootCA.crt -verbose my.cert C = CU, ST = ST, L = Location, O = company, OU = CTS, CN = raspberry-pi 4 5426 error 3 at 0 depth lookup: unable to get certificate CRL error my.cert: verification failed
解决方案
校验CRL与CA证书的匹配性
从OpenSSL报错unable to get certificate CRL来看,核心问题是客户端证书的颁发CA与CRL的颁发CA不匹配,或CRL无法被当前CA链验证:- 执行
openssl crl -in /etc/mosquitto/my-crlfile -text -noout,查看Issuer字段,确认和ca.cert的Subject字段完全一致。 - 若使用多级CA链,需用
capath替代cafile,将所有CA证书放入指定目录后执行c_rehash生成哈希链接,让OpenSSL能自动匹配CA与对应的CRL。
- 执行
修正OpenSSL验证命令
若客户端证书由中间CA颁发,验证时需提供完整CA链文件:openssl verify -crl_check -CRLfile ../MyOrg.crl -CAfile ../full-chain-ca.crt -verbose my.cert其中
full-chain-ca.crt是根CA+所有中间CA的合并文件。调整Mosquitto的CRL配置权限
确保Mosquitto运行用户(通常为mosquitto)拥有CRL文件的读权限:chown mosquitto:mosquitto /etc/mosquitto/my-crlfile && chmod 640 /etc/mosquitto/my-crlfile确认CRL有效性
执行openssl crl -in /etc/mosquitto/my-crlfile -text -noout,检查:Last Update和Next Update时间在当前系统时间范围内。Signature Algorithm与CA证书的签名算法一致。
内容的提问来源于stack exchange,提问作者Ace of Spade
相关产品推荐
相关产品推荐

