You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

解决方案
  1. 校验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。
  2. 修正OpenSSL验证命令
    若客户端证书由中间CA颁发,验证时需提供完整CA链文件:

    openssl verify -crl_check -CRLfile ../MyOrg.crl -CAfile ../full-chain-ca.crt -verbose my.cert
    

    其中full-chain-ca.crt是根CA+所有中间CA的合并文件。

  3. 调整Mosquitto的CRL配置权限
    确保Mosquitto运行用户(通常为mosquitto)拥有CRL文件的读权限:

    chown mosquitto:mosquitto /etc/mosquitto/my-crlfile && chmod 640 /etc/mosquitto/my-crlfile
    
  4. 确认CRL有效性
    执行openssl crl -in /etc/mosquitto/my-crlfile -text -noout,检查:

    • Last Update和Next Update时间在当前系统时间范围内。
    • Signature Algorithm与CA证书的签名算法一致。

内容的提问来源于stack exchange,提问作者Ace of Spade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:27:21