跳转到内容
搜索文档

客户端证书

最后更新 查看 MarkdownAgent 设置

客户端证书(Client Certificate)设备状态属性检查设备是否拥有由受信任证书签名的有效客户端证书。该受信任证书会被上传到 Cloudflare 并作为状态检查规则的一部分进行指定。客户端证书状态检查可用于 Gateway 和 Access 策略中,以确保用户是从托管设备进行连接的。

功能可用性

客户端模式 Zero Trust 计划
所有模式 所有计划
系统 可用性 最低客户端版本1
Windows 2024.6.415.0
macOS 2024.6.416.0
Linux 2024.6.497.0
iOS
Android
ChromeOS

1 在较早的 Cloudflare One Client 版本上运行的客户端证书检查将继续工作。要配置新的证书检查,请将 Cloudflare One Client 更新至上面列出的版本。

前提条件

  • 为您的设备颁发客户端证书的 CA。Cloudflare One Client 不会评估证书信任链;这需要是签发证书。

  • Cloudflare One Client 已在设备上部署

  • 客户端证书已在设备上安装并信任

配置客户端证书检查

  1. 使用 上传 mTLS 证书端点 将证书和私钥上传到 Cloudflare。该证书必须为 signing certificate,格式化为单字符串,并用 \n 替换换行符。The private key is only required if you are using this custom certificate for Gateway HTTPS inspection.

    Required API token permissions

    At least one of the following token permissions is required:
    • Account: SSL and Certificates Write
    Upload mTLS certificatebash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/mtls_certificates" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "example_ca_cert",
    		"certificates": "-----BEGIN CERTIFICATE-----\nXXXXX\n-----END CERTIFICATE-----",
    		"private_key": "-----BEGIN PRIVATE KEY-----\nXXXXX\n-----END PRIVATE KEY-----",
    		"ca": true
    	}'

    响应将返回该证书的 UUID。例如:

    {
      "success": true,
      "errors": [],
      "messages": [],
      "result": {
        "id": "2458ce5a-0c35-4c7f-82c7-8e9487d3ff60",
        "name": "example_ca_cert",
        "issuer": "O=Example Inc.,L=California,ST=San Francisco,C=US",
        "signature": "SHA256WithRSA",
        ...
      }
    }
  2. Cloudflare 仪表板中,转到 Zero Trust > Reusable components(可重用组件) > Posture checks(安全状况检查)

  3. 转到 Cloudflare One Client checks(Cloudflare One 客户端检查) 并选择 Add a check(添加检查)

  4. 选择 Client certificate(客户端证书)

  5. 您将被要求提供以下信息:

    1. Name(名称):输入此设备状态检查的唯一名称。

    2. Operating system(操作系统):选择您的操作系统。

    3. OS locations(操作系统位置):指定安装客户端证书的一个或多个位置。

      Windows

      • 本地计算机信任存储区(Local machine trust store)
      • 用户信任存储区(User trust store)

      macOS

      • 系统钥匙串(System keychain)

      Linux

      • NSSDB (/etc/pki/nssdb) - 要搜索自定义位置,请输入证书和私钥的绝对文件路径(例如 /usr/local/mycompany/certs/client.pem/usr/local/mycompany/certs/client_key.pem)。证书和私钥必须采用 PEM 格式。它们可以在两个不同的文件中,也可以在同一个文件中。
    4. Certificate ID(证书 ID):输入签名证书的 UUID。

    5. Common name(通用名称):(可选)要检查客户端证书上的通用名称(Common Name,简称 CN),请输入包含可选 ${serial_number}${hostname} 变量的字符串(例如 ${serial_number}_mycompany)。Cloudflare One Client 将搜索完全匹配且不区分大小写的内容。如果不指定通用名称,Cloudflare One Client 将忽略证书上的通用名称字段。

    6. Check for Extended Key Usage(检查扩展密钥用法):(可选)检查客户端证书是否设置了一个或多个属性。受支持的值包括 Client authentication(客户端身份验证) (1.3.6.1.5.5.7.3.2) 和/或 Email(电子邮件) (1.3.6.1.5.5.7.3.4)。

    7. Check for private key(检查私钥):(推荐)启用时,WARP 将检查设备是否具有与该客户端证书关联的私钥。

    8. Subject Alternative Name(使用者备用名称):(可选)要检查客户端证书上的使用者替代名称(Subject Alternative Name,简称 SAN),请输入包含可选 ${serial_number}${hostname} 变量的字符串(例如 ${serial_number}_mycompany)。Cloudflare One Client 将搜索完全匹配且不区分大小写的内容。您可以向状态检查中添加多个 SAN——证书只需匹配其中一个 SAN 即可通过检查。

  6. 选择 Save(保存)

接下来,转到 Insights(洞察) > Logs(日志) > Posture logs,验证客户端证书检查是否返回了预期结果。

故障排除

您可以使用以下命令来检查客户端证书是否已在设备上正确安装并受到信任。

  1. 打开 PowerShell 窗口。
  2. 要搜索本地计算机信任存储区中具有特定通用名称的证书,请运行以下命令:
Get-ChildItem Cert:\LocalMachine\My\ | where{$_.Subject -like "*<COMMON_NAME>*"}
  1. 要搜索用户信任存储区中具有特定通用名称的证书,请运行以下 command:
Get-ChildItem Cert:\CurrentUser\My\ | where{$_.Subject -like "*<COMMON_NAME>*"}
  1. 打开 Terminal。
  2. 要搜索系统钥匙串(System Keychain)中具有特定通用名称的证书,请运行以下命令:
/usr/bin/security find-certificate -c "<COMMON_NAME>" -p /Library/Keychains/System.keychain
  1. 打开 Terminal。
  2. 要列出 NSSDB 中的所有客户端证书,请运行以下命令:
certutil -L -d /etc/pki/nssdb
Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

meow                                                         CTu,Cu,Cu
noPrivateKey                                                 CT,,
  1. 使用其证书昵称打开您所需的证书。通用名称将显示在 Subject: "CN=123456.mycompany" 这一行。
certutil -L -d /etc/pki/nssdb -n meow
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 236 (0xec)
        Signature Algorithm: PKCS #1 SHA-256 With RSA Encryption
        Issuer: "CN=123456.mycompany"
        Validity:
            Not Before: Tue Jul 02 17:20:40 2024
            Not After : Sun Jul 02 17:20:40 2034
        Subject: "CN=123456.mycompany"
        Subject Public Key Info:
            Public Key Algorithm: PKCS #1 RSA Encryption
            RSA Public Key:
                Modulus:
                    <redacted>
                Exponent: 65537 (0x10001)
    Signature Algorithm: PKCS #1 SHA-256 With RSA Encryption
    Signature:
        <redacted>
    Fingerprint (SHA-256):
        <redacted>
    Fingerprint (SHA1):
        <redacted>

    Mozilla-CA-Policy: false (attribute missing)
    Certificate Trust Flags:
        SSL Flags:
            Valid CA
            Trusted CA
            User
            Trusted Client CA
        Email Flags:
            Valid CA
            Trusted CA
            User
        Object Signing Flags:
            Valid CA
            Trusted CA
            User

为了使状态检查通过,输出中必须出现对已上传签名证书进行验证的证书。

这篇文档对您有帮助吗?