配置客户端证书

通过配置客户端证书,您可以在客户端和边缘安全加速 ESA节点间的链路上使能TLS双向认证(mTLS),从而提升客户端接入的安全等级。

客户端证书签发

您可以直接使用ESA提供的CA创建客户端证书,然后将生成的客户端证书部署在您的移动端应用程序上,我们会为每个账户生成一个唯一的CA,所有由ESA签发的客户端证书都将被节点默认为可信。

创建证书

  1. ESA控制台,选择站点管理,在站点列单击目标站点。

  2. 在左侧导航栏中,选择SSL/TLS > 客户端证书,单击创建证书

  3. 根据实际需求,选择CSR生成方式私钥类型证书有效期

    说明

    证书默认有效期是1年。

  4. 单击确定

    重要

    在弹出的证书预览对话框中,单击页面中的“复制证书”、“复制私钥”将内容复制并粘贴到您的客户端。关闭弹窗后不会在其他地方显示证书及私钥。

绑定域名

通过将客户端证书与特定域名绑定,可以实现双向认证(mTLS),确保只有持有正确、有效客户端证书的用户才能访问特定服务或资源。

  1. ESA控制台,选择站点管理,在站点列单击目标站点。

  2. 在左侧菜单栏中的单击SSL/TLS > 客户端证书

  3. 单击域名区域的配置,在域名信息框中填入域名。

    说明
    • 一次最多输入50个域名。

    • 域名必须和站点匹配。

  4. 单击确定

吊销证书

您若不需要证书信任时,可以吊销证书,具体操作如下:

  1. ESA控制台,选择站点管理,在站点列单击目标站点。

  2. 单击左侧菜单栏中的SSL/TLS > 客户端证书

  3. 选择客户端证书 > 操作,单击吊销

  4. 在弹出的对话框中,勾选我已确认该证书已不再使用。单击确定吊销

自定义证书签发

除了使用上述的ESA CA签发的客户端证书外,您还可以使用您通过私有渠道签发的证书,此时需要对证书的CA进行配置。

说明

自定义证书签发目前只支持OpenAPI途径使用,每个套餐最多上传5CA证书。

操作步骤

  1. 调用上传客户端mTLS CA证书接口,上传CA根证书,并记录该OpenAPI响应中返回的证书ID。

  2. 调用域名绑定接口,为CA证书绑定生效主机列表,只有绑定主机才可以使用mTLS功能并使用对应CA证书进行mTLS校验。

  3. 其他自定义mTLS证书功能相关OpenAPI如下表所示。

    接口名称

    接口描述

    UploadClientCaCertificate

    上传自定义签发CA证书。

    ListClientCaCertificates

    展示所有已上传的自定义签发CA证书。

    DeleteClientCaCertificate

    删除自定义签发CA证书。

    GetClientCaCertificate

    查询某一个自定义签发CA证书详情。

    SetClientCertificateHostnames

    为自定义签发CA证书绑定域名。

    GetClientCertificateHostnames

    查询自定义签发CA证书绑定域名情况。

拦截认证失败请求

您可以通过配置WAF规则,对客户端证书认证失败的请求进行拦截。

操作步骤

  1. ESA控制台,选择站点管理,在站点列单击目标站点。

  2. 在左侧导航栏,单击SSL/TLS > 客户端证书 > 创建mTLS规则进入自定义规则配置页面。

    image

  3. 配置WAF自定义规则。

    • 已验证客户端证书设置为image.png

    • 主机名填写您期望拦截的域名信息。

      重要

      请务必对主机名条件进行配置,否则所有未进行客户端证书认证或客户端认证失败的请求都会被拦截。

    image

  4. 操作设置为拦截,或根据您的需求将操作配置为其他动作。

    image

  5. 单击确定完成规则添加。

    规则新增完成后,所有访问规则中域名的请求,如果未进行客户端证书认证或客户端认证失败,将被拦截并返回403状态码。

验证环节

  • 当客户端不携带证书进行访问时,被WAF拦截返回403。

    image

  • 当客户端携带ESA颁发的客户端证书进行访问时,请求正常。

    curl -v "https://example.com" --cert ./example.crt --key ./example.key 
    * Trying 10.10.10.10...
    * TCP_NODELAY set
    * Connected to 1.zhouwei.queniuwk.cn (10.10.10.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=1.zhouwei.queniuwk.cn
    * start date: Jul 31 00:00:00 2024 GMT
    * expire date: Jul 31 23:59:59 2025 GMT
    * subjectAltName: host "1.zhouwei.queniuwk.cn" matched cert's "1.zhouwei.queniuwk.cn"
    * issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=Encryption Everywhere DV TLS CA - G2
    * SSL certificate verify ok.
    > GET / HTTP/1.1
    > Host: 1.zhouwei.queniuwk.cn
    > User-Agent: curl/7.74.0
    > Accept: */*