跳到正文
Træfɪk

PassTLSClientCert

passTLSClientCert 中间件将传入客户端 TLS 证书中的选定数据添加到头中。

配置示例

通过 X-Forwarded-Tls-Client-Cert 头传递 PEM:

# Pass the pem in the `X-Forwarded-Tls-Client-Cert` header.
http:
  middlewares:
    test-passtlsclientcert:
      passTLSClientCert:
        pem: true
# Pass the pem in the `X-Forwarded-Tls-Client-Cert` header.
[http.middlewares]
  [http.middlewares.test-passtlsclientcert.passTLSClientCert]
    pem = true
# Pass the pem in the `X-Forwarded-Tls-Client-Cert` header.
labels:
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.pem=true"
// Pass the pem in the `X-Forwarded-Tls-Client-Cert` header
{
  "Tags": [
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.pem=true"
  ]
}
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: test-passtlsclientcert
spec:
  passTLSClientCert:
    pem: true
通过 X-Forwarded-Tls-Client-Cert 头传递 PEM
# Pass all the available info in the `X-Forwarded-Tls-Client-Cert-Info` header
http:
  middlewares:
    test-passtlsclientcert:
      passTLSClientCert:
        info:
          notAfter: true
          notBefore: true
          sans: true
          subject:
            country: true
            province: true
            locality: true
            organization: true
            organizationalUnit: true
            commonName: true
            serialNumber: true
            domainComponent: true
          issuer:
            country: true
            province: true
            locality: true
            organization: true
            commonName: true
            serialNumber: true
            domainComponent: true
# Pass all the available info in the `X-Forwarded-Tls-Client-Cert-Info` header
[http.middlewares]
  [http.middlewares.test-passtlsclientcert.passTLSClientCert]
    [http.middlewares.test-passtlsclientcert.passTLSClientCert.info]
      notAfter = true
      notBefore = true
      sans = true
      [http.middlewares.test-passtlsclientcert.passTLSClientCert.info.subject]
        country = true
        province = true
        locality = true
        organization = true
        organizationalUnit = true
        commonName = true
        serialNumber = true
        domainComponent = true
      [http.middlewares.test-passtlsclientcert.passTLSClientCert.info.issuer]
        country = true
        province = true
        locality = true
        organization = true
        commonName = true
        serialNumber = true
        domainComponent = true
# Pass all the available info in the `X-Forwarded-Tls-Client-Cert-Info` header
labels:
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.notafter=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.notbefore=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.sans=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.serialnumber=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.commonname=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.country=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.domaincomponent=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.locality=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.organization=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.organizationalunit=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.province=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.serialnumber=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.commonname=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.country=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.domaincomponent=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.locality=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.organization=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.province=true"
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.serialnumber=true"
// Pass all the available info in the `X-Forwarded-Tls-Client-Cert-Info` header
{
  //...
  "Tags" : [
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.notafter=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.notbefore=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.sans=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.commonname=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.country=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.domaincomponent=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.locality=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.organization=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.organizationalunit=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.province=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.subject.serialnumber=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.commonname=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.country=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.domaincomponent=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.locality=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.organization=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.province=true",
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.info.issuer.serialnumber=true"
  ]
}
# Pass all the available info in the `X-Forwarded-Tls-Client-Cert-Info` header
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: test-passtlsclientcert
spec:
  passTLSClientCert:
    info:
      notAfter: true
      notBefore: true
      sans: true
      subject:
        country: true
        province: true
        locality: true
        organization: true
        organizationalUnit: true
        commonName: true
        serialNumber: true
        domainComponent: true
      issuer:
        country: true
        province: true
        locality: true
        organization: true
        commonName: true
        serialNumber: true
        domainComponent: true

一般信息

passTLSClientCert 可以向请求添加两个头:

  • X-Forwarded-Tls-Client-Cert:包含 PEM。
  • X-Forwarded-Tls-Client-Cert-Info:包含转义为字符串的所有选定证书信息。

提示

  • X-Forwarded-Tls-Client-Cert-Info 头的值是经过转义的字符串,可用作有效的 URL 查询。
  • 这些选项仅根据 MutualTLS 配置生效。也就是说,只会传递符合 clientAuth.clientAuthType 策略的证书。

配置选项

字段 说明 默认值 必填
pem 使用证书信息填充 X-Forwarded-Tls-Client-Cert 头。
更多信息见此处。
false 否
info.serialNumber 添加证书的 Serial Number(序列号)。
info 的更多信息见此处。
false 否
info.notAfter 添加 Validity 部分的 Not After(有效期结束)信息。
info 的更多信息见此处。
false 否
info.notBefore 添加 Validity 部分的 Not Before(有效期开始)信息。
info 的更多信息见此处。
false 否
info.sans 添加 Subject Alternative Name 部分的 Subject Alternative Name(主体备用名称)信息。
info 的更多信息见此处。
false 否
info.subject info.subject 选择要添加到 X-Forwarded-Tls-Client-Cert-Info 头中的具体客户端证书主体信息。
info 的更多信息见此处。
false 否
info.subject.country 向主体添加 country(国家)信息。
数据来自主体部分的 C 键。
info 的更多信息见此处。
false 否
info.subject.province 向主体添加 province(省份)信息。
数据来自主体部分的 ST 键。
info 的更多信息见此处。
false 否
info.subject.locality 向主体添加 locality(地区)信息。
数据来自主体部分的 L 键。
info 的更多信息见此处。
false 否
info.subject.organization 向主体添加 organization(组织)信息。
数据来自主体部分的 O 键。
info 的更多信息见此处。
false 否
info.subject.organizationalUnit 向主体添加 organizationalUnit(组织单位)信息。
数据来自主体部分的 OU 键。
info 的更多信息见此处。
false 否
info.subject.commonName 向主体添加 commonName(通用名称)信息。
数据来自主体部分的 CN 键。
false 否
info.subject.serialNumber 向主体添加 serialNumber(序列号)信息。
数据来自主体部分的 SN 键。
false 否
info.subject.domainComponent 向主体添加 domainComponent(域组件)信息。
数据来自主体部分的 DC 键。
info 的更多信息见此处。
false 否
info.issuer info.issuer 选择要添加到 X-Forwarded-Tls-Client-Cert-Info 头中的具体客户端证书签发者信息。
info 的更多信息见此处。
false 否
info.issuer.country 向签发者添加 country(国家)信息。
数据来自签发者部分的 C 键。
info 的更多信息见此处。
false 否
info.issuer.province 向签发者添加 province(省份)信息。
数据来自签发者部分的 ST 键。
info 的更多信息见此处。
false 否
info.issuer.locality 向签发者添加 locality(地区)信息。
数据来自签发者部分的 L 键。
info 的更多信息见此处。
false 否
info.issuer.organization 向签发者添加 organization(组织)信息。
数据来自签发者部分的 O 键。
info 的更多信息见此处。
false 否
info.issuer.commonName 向签发者添加 commonName(通用名称)信息。
数据来自签发者部分的 CN 键。
info 的更多信息见此处。
false 否
info.issuer.serialNumber 向签发者添加 serialNumber(序列号)信息。
数据来自签发者部分的 SN 键。
info 的更多信息见此处。
false 否
info.issuer.domainComponent 向签发者添加 domainComponent(域组件)信息。
数据来自签发者部分的 DC 键。
info 的更多信息见此处。
false 否

pem 证书

数据格式

会移除分隔标记和 \n。
如果有多个证书,则使用“,”分隔。

头大小

X-Forwarded-Tls-Client-Cert 头的值可能超过 Web 服务器的头大小限制。

Web 服务器的头大小限制通常在 4kb 到 8kb 之间。
如果这成为问题,并且无法重新配置服务器来允许更大的头, 则可以只选择证书中需要的部分,来缓解此问题, 具体可使用下文的 info 选项(同时将 pem 设为 false)。

info 证书信息

info 选项选择要添加到 X-Forwarded-Tls-Client-Cert-Info 头中的具体客户端证书信息。

数据格式

头的值是所有选定证书信息连接并转义后的结果。 除非另有说明,为了便于阅读,所有头值示例均展示为未转义形式。

如果有多个证书,则使用 , 分隔。

以下示例展示选择所有可用字段时的连接结果:

Subject="DC=org,DC=cheese,C=FR,C=US,ST=Cheese org state,ST=Cheese com state,L=TOULOUSE,L=LYON,O=Cheese,O=Cheese 2,CN=*.example.com";Issuer="DC=org,DC=cheese,C=FR,C=US,ST=Signing State,ST=Signing State 2,L=TOULOUSE,L=LYON,O=Cheese,O=Cheese 2,CN=Simple Signing CA 2";SerialNumber="1";NB="1747282426";NA="1778818426";SAN="*.example.org,*.example.net,*.example.com,[email protected],[email protected],10.0.1.0,10.0.1.2"

版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证