Skip to content

CRL 检查

从 EMQX v5.0.3 开始,EMQX 支持对 MQTT SSL 监听器进行证书吊销列表(Certificate Revocation List,CRL)检查。该功能仅适用于类型为 ssl 的监听器,不支持安全 WebSocket(wss)和 QUIC 监听器。

启用 CRL 检查后,EMQX 会根据客户端证书中指定的 CRL 分发点(CRL Distribution Point)来验证客户端证书是否已被吊销。如果证书被标记为已吊销,EMQX 将在 SSL/TLS 握手阶段拒绝该连接。

注意

要使 CRL 吊销检查生效,CRL 本身必须包含 Issuing Distribution Point 扩展,详见 RFC 3280 第 5.2.5 节

启用 CRL 检查

要启用 CRL 检查,需要同时满足以下条件:

  1. 在 SSL 监听器中启用 CRL 检查选项。
  2. 将监听器的 verify 选项设置为 verify_peer,以确保对客户端证书进行校验。

以下示例展示了如何配置启用了 CRL 检查的 SSL 监听器:

hcl
listeners.ssl.default {
  bind = "0.0.0.0:8883"
  ssl_options {
    # 包含受信任 CA(证书颁发机构)证书的 PEM 格式文件,用于验证客户端证书的合法性
    cacertfile = "/etc/emqx/certs/ca.pem"

    # 包含监听器 SSL/TLS 证书链的 PEM 格式文件。
    # 如果证书不是由根 CA 直接签发,需要在监听器证书后附加中间 CA 证书以形成完整证书链
    certfile = "/etc/emqx/certs/server.pem"

    # 与 SSL/TLS 证书对应的私钥 PEM 文件
    keyfile = "/etc/emqx/certs/server.key"

    # 必须校验客户端证书
    verify = verify_peer

    # 强制客户端发送非空证书,否则 TLS 握手失败
    fail_if_no_peer_cert = true

    # 启用客户端证书吊销状态(CRL)检查
    enable_crl_check = true
  }
}

其中:

  • verify = verify_peer 表示将启用对端验证。
  • enable_crl_check = true 表示启用 CRL 检查。

CRL 缓存

为了避免频繁向 CRL 分发点发起 HTTP 请求,EMQX 会在本地缓存已获取的 CRL。

当客户端连接时,如果 EMQX 首次检测到新的 CRL URL,会从客户端证书中指定的分发点获取对应的 CRL。默认情况下,EMQX 每 15 分钟刷新一次缓存的 CRL,以确保证书吊销信息保持最新。