View a markdown version of this page

双向 TLS 的助手方法 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

双向 TLS 的助手方法

CloudFront 在 cf.mtls 命名空间中为查看器请求函数提供特定于 mTLS 的助手函数。这些函数在将请求转发到源之前,重命名、重新格式化或组合客户端证书标头。

import cf from "cloudfront";

cf.mtls.renameClientCertHeaders

将证书元数据标头重命名为自定义标头名称。

cf.mtls.renameClientCertHeaders({ "CloudFront-Viewer-Cert-Pem": "X-Client-Cert", "CloudFront-Viewer-Cert-Serial-Number": "X-Client-Cert-Serial", "CloudFront-Viewer-Cert-Issuer": "X-Client-Cert-Issuer", });

允许的源标头:

  • CloudFront-Viewer-Cert-Pem

  • CloudFront-Viewer-Cert-Serial-Number

  • CloudFront-Viewer-Cert-Issuer

  • CloudFront-Viewer-Cert-Subject

  • CloudFront-Viewer-Cert-Validity

  • CloudFront-Viewer-Cert-Present

  • CloudFront-Viewer-Cert-Sha256

  • Client-Cert

  • Client-Cert-Chain

cf.mtls.renamePemHeaders

重命名 PEM 证书标头,也可以选择重新格式化证书编码。

cf.mtls.renamePemHeaders({ "Client-Cert": { "newHeaderName": "X-Leaf-Cert", "pemCertFormatInfo": { "certHeader": "-----CUSTOM HEADER-----", "certFooter": "-----CUSTOM FOOTER-----", "certEndMarker": "", "keepNewlinesInCertData": true } }, "Client-Cert-Chain": { "newHeaderName": "X-Intermediate-Certs", "pemCertFormatInfo": { "certHeader": "-----CUSTOM HEADER-----", "certFooter": "-----CUSTOM FOOTER-----", "certEndMarker": "", "keepNewlinesInCertData": true } } });

允许的源标头:

  • 在直通模式下:Client-CertClient-Cert-Chain

  • 在必需/可选模式下:Cloudfront-Viewer-Cert-PEM

pemCertFormatInfo 字段:

对于:Cloudfront-Viewer-Cert-PEM

  • certHeader 替换 -----BEGIN CERTIFICATE-----

  • certFooter 替换 -----END CERTIFICATE-----

  • certEndMarker 在 certFooter 之后设置一个自定义字符串。

  • keepNewlinesInCertData(默认:true)当为 true 时,保留 base64 数据中的换行符。

对于 Client-CertClient-Cert-Chain

  • certHeader 替换 :

  • certFooter 替换 :

  • certEndMarker 在 certFooter 之后设置一个自定义字符串。

  • keepNewlinesInCertData(默认:false)当为 true 时,保留 base64 数据中的换行符。

cf.mtls.combinePemHeaders

Client-CertClient-Cert-Chain 组合成包含完整证书链的单个标头。

cf.mtls.combinePemHeaders({ "newHeaderName": "X-Full-Chain", "pemCertFormatInfo": { "certHeader": "-----BEGIN CERTIFICATE-----", "certFooter": "-----END CERTIFICATE-----", "certEndMarker": "\n", "keepNewlinesInCertData": false } });

certEndMarker 设置证书之间的分隔符。

注意
  • 这些助手函数可以在所有 mTLS 模式下使用(必需、可选和直通)。但是,cf.mtls.combinePemHeaders 仅在直通模式下有效,在必需模式和可选模式下,Client-CertClient-Cert-Chain 标头不存在,因此该函数是无操作的。

  • 如果 cf.mtls.* 方法和具有 customHeaderscf.updateRequestOrigin() 指向相同的标头名称,则 CloudFront 会返回 502 错误。

  • 在直通模式下,CloudFront 会丢弃所有传入的 Client-CertClient-Cert-Chain 标头,并从实际客户端证书中重新添加它们。

  • CloudFront 不会在任何边缘函数中提供完整的原始 PEM 证书内容。