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"