双向 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-PemCloudFront-Viewer-Cert-Serial-NumberCloudFront-Viewer-Cert-IssuerCloudFront-Viewer-Cert-SubjectCloudFront-Viewer-Cert-ValidityCloudFront-Viewer-Cert-PresentCloudFront-Viewer-Cert-Sha256Client-CertClient-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-Cert、Client-Cert-Chain在必需/可选模式下:
Cloudfront-Viewer-Cert-PEM
pemCertFormatInfo 字段:
对于:Cloudfront-Viewer-Cert-PEM
certHeader替换-----BEGIN CERTIFICATE-----。certFooter替换-----END CERTIFICATE-----。certEndMarker在 certFooter 之后设置一个自定义字符串。keepNewlinesInCertData(默认:true)当为 true 时,保留 base64 数据中的换行符。
对于 Client-Cert 和 Client-Cert-Chain:
certHeader替换:。certFooter替换:。certEndMarker在 certFooter 之后设置一个自定义字符串。keepNewlinesInCertData(默认:false)当为 true 时,保留 base64 数据中的换行符。
cf.mtls.combinePemHeaders
将 Client-Cert 和 Client-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-Cert和Client-Cert-Chain标头不存在,因此该函数是无操作的。 -
如果
cf.mtls.*方法和具有customHeaders的cf.updateRequestOrigin()指向相同的标头名称,则 CloudFront 会返回 502 错误。 -
在直通模式下,CloudFront 会丢弃所有传入的
Client-Cert或Client-Cert-Chain标头,并从实际客户端证书中重新添加它们。 -
CloudFront 不会在任何边缘函数中提供完整的原始 PEM 证书内容。