通过配置客户端证书,您可以在客户端和边缘安全加速 ESA节点间的链路上使能TLS双向认证(mTLS),从而提升客户端接入的安全等级。
适用场景
双向传输层安全 mTLS(Mutual TLS)技术适用于需要对通信双方都进行强身份验证的高安全场景。
适用场景特点:
通信双方都是可控实体(服务、设备、系统)
需要强身份绑定(非临时 Token)
能够统一管理 PKI 体系(CA、证书分发、吊销)
典型适用场景示例:
微服务架构中的服务间通信(Service-to-Service),典型技术栈:Istio、Linkerd、Kubernetes,例如:订单服务调用支付服务时,双方必须通过 mTLS 验证彼此身份。
API 网关与后端服务的安全对接,例如:企业内部 API、银行开放平台、第三方 SaaS 集成。
物联网(IoT)设备与云平台通信。
企业内网零信任访问控制,取代传统 VPN「一次认证、全程信任」模型。
高安全要求的金融、支付、医疗系统,合规驱动,满足 PCI-DSS、HIPAA、GDPR 等对端到端加密和身份验证的要求。
不适用场景特点:
普通 Web 浏览器访问网站(如电商、新闻网站),用户无法管理客户端证书,体验差。
公开开放的 RESTful API(无需身份绑定),使用 OAuth2 / API Key 更合适。
低安全要求的内部测试环境,可用单向 TLS + Basic Auth 简化流程。
客户端证书签发
您可以直接使用ESA提供的CA创建客户端证书,然后将生成的客户端证书部署在您的移动端应用程序上,我们会为每个账户生成一个唯一的CA,所有由ESA签发的客户端证书都将被节点默认为可信。
证书默认有效期为1年。
创建证书
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏,选择。单击创建证书。
根据实际需求,选择CSR生成方式、私钥类型和证书有效期后单击确定。
重要在弹出的证书预览对话框中,单击页面中的复制证书、复制私钥将内容复制并粘贴到您的客户端。关闭弹窗后不会在其他地方显示证书及私钥。
绑定域名
通过将客户端证书与特定域名绑定,可以实现双向认证(mTLS),确保只有持有正确、有效客户端证书的用户才能访问特定服务或资源。
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏,选择。
单击域名区域的配置,在域名信息框中填入域名后单击确定。
说明一次最多输入50个域名。
域名必须和站点匹配。
吊销证书
您若不需要证书信任时,可以吊销证书,具体操作如下:
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏,选择。
选择,单击吊销。
在弹出的对话框中,勾选我已确认该证书已不再使用。单击确定吊销。
自定义证书签发
除了使用上述的ESA CA签发的客户端证书外,您还可以使用您通过私有渠道签发的证书,此时需要对证书的CA进行配置。
自定义证书签发目前只支持OpenAPI途径使用,每个套餐最多上传5个CA证书。
操作步骤
调用上传客户端mTLS CA证书接口,上传CA根证书,并记录该OpenAPI响应中返回的证书ID。
调用域名绑定接口,为CA证书绑定生效主机列表,只有绑定主机才可以使用mTLS功能并使用对应CA证书进行mTLS校验。
其他自定义mTLS证书功能相关OpenAPI如下表所示。
接口名称
接口描述
上传自定义签发CA证书。
展示所有已上传的自定义签发CA证书。
删除自定义签发CA证书。
查询某一个自定义签发CA证书详情。
为自定义签发CA证书绑定域名。
查询自定义签发CA证书绑定域名情况。
拦截认证失败请求
您可以通过配置WAF规则,对客户端证书认证失败的请求进行拦截。
操作步骤
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏中选择进入自定义规则配置页面。
配置WAF自定义规则。
已验证客户端证书设置为
。主机名填写您期望拦截的域名信息。
重要请务必对主机名条件进行配置,否则所有未进行客户端证书认证或客户端认证失败的请求都会被拦截。
将操作设置为拦截,或根据您的需求配置为其他动作。
单击确定完成规则添加。
规则新增完成后,所有访问规则中域名的请求,如果未进行客户端证书认证或客户端认证失败,将被拦截并返回403状态码。
验证环节
当客户端不携带证书进行访问时,被WAF拦截返回403。

当客户端携带ESA颁发的客户端证书进行访问时,请求正常。请将命令中的域名、证书与私钥路径替换为您实际环境。
curl -v "https://example.com" --cert ./example.crt --key ./example.key * Trying 198.51.100.10... * TCP_NODELAY set * Connected to example.com (198.51.100.10) port 443 (#0) * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * TLSv1.2 (OUT), TLS Unknown, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * NPN, negotiated HTTP1.1 * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Request CERT (13): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Certificate (11): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS handshake, CERT verify (15): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Next protocol (67): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * Server certificate: * subject: CN=example.com * start date: Jul 31 00:00:00 2024 GMT * expire date: Jul 31 23:59:59 2025 GMT * subjectAltName: host "example.com" matched cert's "example.com" * issuer: C=US; O=Example CA; CN=Example DV TLS CA * SSL certificate verify ok. > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.74.0 > Accept: */*