客户端证书(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 已在设备上部署。
-
客户端证书已在设备上安装并信任。
使用 上传 mTLS 证书端点 将证书和私钥上传到 Cloudflare。该证书必须为 signing certificate,格式化为单字符串,并用
\n替换换行符。The private key is only required if you are using this custom certificate for Gateway HTTPS inspection.
At least one of the following token permissions is required:Required API token permissions
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", ... } }-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Reusable components(可重用组件) > Posture checks(安全状况检查)。
-
转到 Cloudflare One Client checks(Cloudflare One 客户端检查) 并选择 Add a check(添加检查)。
-
选择 Client certificate(客户端证书)。
-
您将被要求提供以下信息:
-
Name(名称):输入此设备状态检查的唯一名称。
-
Operating system(操作系统):选择您的操作系统。
-
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格式。它们可以在两个不同的文件中,也可以在同一个文件中。
-
Certificate ID(证书 ID):输入签名证书的 UUID。
-
Common name(通用名称):(可选)要检查客户端证书上的通用名称(Common Name,简称 CN),请输入包含可选
${serial_number}和${hostname}变量的字符串(例如${serial_number}_mycompany)。Cloudflare One Client 将搜索完全匹配且不区分大小写的内容。如果不指定通用名称,Cloudflare One Client 将忽略证书上的通用名称字段。 -
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)。 -
Check for private key(检查私钥):(推荐)启用时,WARP 将检查设备是否具有与该客户端证书关联的私钥。
-
Subject Alternative Name(使用者备用名称):(可选)要检查客户端证书上的使用者替代名称(Subject Alternative Name,简称 SAN),请输入包含可选
${serial_number}和${hostname}变量的字符串(例如${serial_number}_mycompany)。Cloudflare One Client 将搜索完全匹配且不区分大小写的内容。您可以向状态检查中添加多个 SAN——证书只需匹配其中一个 SAN 即可通过检查。
-
-
选择 Save(保存)。
接下来,转到 Insights(洞察) > Logs(日志) > Posture logs,验证客户端证书检查是否返回了预期结果。
您可以使用以下命令来检查客户端证书是否已在设备上正确安装并受到信任。
- 打开 PowerShell 窗口。
- 要搜索本地计算机信任存储区中具有特定通用名称的证书,请运行以下命令:
Get-ChildItem Cert:\LocalMachine\My\ | where{$_.Subject -like "*<COMMON_NAME>*"}- 要搜索用户信任存储区中具有特定通用名称的证书,请运行以下 command:
Get-ChildItem Cert:\CurrentUser\My\ | where{$_.Subject -like "*<COMMON_NAME>*"}- 打开 Terminal。
- 要搜索系统钥匙串(System Keychain)中具有特定通用名称的证书,请运行以下命令:
/usr/bin/security find-certificate -c "<COMMON_NAME>" -p /Library/Keychains/System.keychain- 打开 Terminal。
- 要列出 NSSDB 中的所有客户端证书,请运行以下命令:
certutil -L -d /etc/pki/nssdbCertificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
meow CTu,Cu,Cu
noPrivateKey CT,,- 使用其证书昵称打开您所需的证书。通用名称将显示在
Subject: "CN=123456.mycompany"这一行。
certutil -L -d /etc/pki/nssdb -n meowCertificate:
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为了使状态检查通过,输出中必须出现对已上传签名证书进行验证的证书。