

# 用于缓存策略并转发到源的查看器 mTLS 标头
<a name="viewer-mtls-headers"></a>

使用双向 TLS 身份验证时，CloudFront 可以从客户端证书中提取信息，并将其作为 HTTP 标头转发到源。这可让原始服务器访问证书详细信息，而无需实施证书验证逻辑。

以下标头可用于创建缓存行为：


| 标头名称 | 说明 | 示例值 | 
| --- | --- | --- | 
| CloudFront-Viewer-Cert-Serial-Number | 证书序列号的十六进制表示形式 | 4a:3f:5c:92:d1:e8:7b:6c | 
| CloudFront-Viewer-Cert-Issuer | 颁发者的可分辨名称（DN）的 RFC2253 字符串表示形式 | CN=rootcamtls.com,OU=rootCA,O=mTLS,L=Seattle,ST=Washington,C=US | 
| CloudFront-Viewer-Cert-Subject | 主题的可分辨名称（DN）的 RFC2253 字符串表示形式 | CN=client\$1.com,OU=client-3,O=mTLS,ST=Washington,C=US | 
| CloudFront-Viewer-Cert-Present | 1（提供）或 0（未提供），用于指示是否提供了证书。在“必需”模式下，此值始终为 1。 | 1 | 
| CloudFront-Viewer-Cert-Sha256 | 客户端证书的 SHA256 哈希 | 01fbf94fef5569753420c349f49adbfd80af5275377816e3ab1fb371b29cb586 | 

对于源请求，除上述可供缓存行为使用的标头外，还会额外提供两个标头。由于潜在的标头大小，CloudFront-Viewer-Cert-Pem 标头不会暴露给边缘函数（Lambda@Edge 或 CloudFront Functions），而只能转发到源。


| 标头名称 | 说明 | 示例值 | 
| --- | --- | --- | 
| CloudFront-Viewer-Cert-Validity | notBefore 和 notAfter 日期的 ISO8601 格式 | CloudFront-Viewer-Cert-Validity：NotBefore=2023-09-21T01:50:17Z;NotAfter=2024-09-20T01:50:17Z | 
| CloudFront-Viewer-Cert-Pem | 叶证书的经 URL 编码的 PEM 格式 | CloudFront-Viewer-Cert-Pem：-----BEGIN%20CERTIFICATE-----%0AMIIG<...reduced...>NmrUlw%0A-----END%20CERTIFICATE-----%0A | 

## 配置标头转发
<a name="configure-header-forwarding"></a>

### 控制台
<a name="configure-headers-console"></a>

在验证模式下，CloudFront 会自动将 CloudFront-Viewer-Cert-\$1 标头添加到所有查看器请求中。要将这些标头转发到源，请执行以下操作：

1. 在主列表分配页面中，选择已启用查看器 mTLS 的分配，然后转至**行为**选项卡

1. 选择缓存行为，然后选择**编辑**

1. 在**源请求策略**部分中，选择**创建策略**或选择现有策略

1. 确保源请求策略包含以下标头：
   + CloudFront-Viewer-Cert-Serial-Number
   + CloudFront-Viewer-Cert-Issuer
   + CloudFront-Viewer-Cert-Subject
   + CloudFront-Viewer-Cert-Present
   + Cloudfront-Viewer-Cert-Sha256
   + CloudFront-Viewer-Cert-Validity
   + CloudFront-Viewer-Cert-Pem

1. 选择**创建**（对于新策略）或**保存更改**（对于现有策略）

1. 在缓存行为中选择策略并保存更改

### 使用 Amazon CLI
<a name="configure-headers-cli"></a>

以下示例演示如何创建包含用于验证模式的 mTLS 标头的源请求策略：

```
aws cloudfront create-origin-request-policy \
  --origin-request-policy-config '{
    "Name": "MTLSHeadersPolicy",
    "HeadersConfig": {
      "HeaderBehavior": "whitelist",
      "Headers": {
        "Quantity": 5,
        "Items": [
          "CloudFront-Viewer-Cert-Serial-Number",
          "CloudFront-Viewer-Cert-Issuer",
          "CloudFront-Viewer-Cert-Subject",
          "CloudFront-Viewer-Cert-Validity",
          "CloudFront-Viewer-Cert-Pem"
        ]
      }
    },
    "CookiesConfig": {
      "CookieBehavior": "none"
    },
    "QueryStringsConfig": {
      "QueryStringBehavior": "none"
    }
  }'
```

## 标头处理注意事项
<a name="header-processing-considerations"></a>

使用证书标头时，请考虑以下最佳实践：
+ **标头验证：**作为一项额外的安全措施，在源中验证证书标头值
+ **标头大小限制：**PEM 证书标头可能较大，请确保您的原始服务器能够处理此类标头
+ **缓存注意事项：**在缓存键中使用证书标头会加剧缓存碎片化
+ **跨源请求：**如果您的应用程序使用 CORS，则可能需要将其配置为允许使用证书标头

## 后续步骤
<a name="headers-next-steps"></a>

配置标头转发后，您可以使用 CloudFront 连接函数和 KeyValueStore 实施证书吊销检查。有关实施吊销检查的详细信息，请参阅[使用 CloudFront 连接函数和 KVS 实施吊销](revocation-connection-function-kvs.md)。