본문 바로가기
WIKI 기술 지식 베이스

PassTLSClientCert

원문 보기 위키 갱신

출처: Traefik PassTLSClientCert Documentation

본문

PassTLSClientCert

passTLSClientCert 미들웨어는 전달된 클라이언트 TLS 인증서에서 선택한 데이터를 헤더에 추가합니다.

구성 예시

pem을 X-Forwarded-Tls-Client-Cert 헤더로 전달:

구조화된 (YAML)

# pem을 `X-Forwarded-Tls-Client-Cert` 헤더로 전달.
http:
  middlewares:
    test-passtlsclientcert:
      passTLSClientCert:
        pem: true

구조화된 (TOML)

# pem을 `X-Forwarded-Tls-Client-Cert` 헤더로 전달.
[http.middlewares]
  [http.middlewares.test-passtlsclientcert.passTLSClientCert]
    pem = true

Labels

# pem을 `X-Forwarded-Tls-Client-Cert` 헤더로 전달.
labels:
  - "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.pem=true"

Tags

// pem을 `X-Forwarded-Tls-Client-Cert` 헤더로 전달
{
  "Tags": [
    "traefik.http.middlewares.test-passtlsclientcert.passtlsclientcert.pem=true"
  ]
}

Kubernetes

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: test-passtlsclientcert
spec:
  passTLSClientCert:
    pem: true

pem을 X-Forwarded-Tls-Client-Cert 헤더로 전달

구조화된 (YAML)

# 사용 가능한 모든 정보를 `X-Forwarded-Tls-Client-Cert-Info` 헤더로 전달
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

구조화된 (TOML)

# 사용 가능한 모든 정보를 `X-Forwarded-Tls-Client-Cert-Info` 헤더로 전달
[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

Labels

# 사용 가능한 모든 정보를 `X-Forwarded-Tls-Client-Cert-Info` 헤더로 전달
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"

Tags

// 사용 가능한 모든 정보를 `X-Forwarded-Tls-Client-Cert-Info` 헤더로 전달
{
  //...
  "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"
  ]
}

Kubernetes

# 사용 가능한 모든 정보를 `X-Forwarded-Tls-Client-Cert-Info` 헤더로 전달
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는 요청에 두 개의 헤더를 추가할 수 있어요:

  • pem을 담고 있는 X-Forwarded-Tls-Client-Cert

  • 선택한 모든 인증서 정보를 이스케이프된 문자열로 담고 있는 X-Forwarded-Tls-Client-Cert-Info

Info

  • X-Forwarded-Tls-Client-Cert-Info 헤더 값은 유효한 URL 쿼리가 되도록 이스케이프된 문자열입니다.

  • 이 옵션들은 MutualTLS 구성에 따라 동작합니다. 즉, clientAuth.clientAuthType 정책에 일치하는 인증서만 전달됩니다.

구성 옵션

| Field | Description | Default | Required | | pem | X-Forwarded-Tls-Client-Cert 헤더를 인증서 정보로 채웁니다. 자세한 내용은 여기. | false | No | | info.serialNumber | 인증서의 Serial Number를 추가해요. info에 대한 자세한 내용은 여기. | false | No | | info.notAfter | Validity 부분의 Not After 정보를 추가해요. info에 대한 자세한 내용은 여기. | false | No | | info.notBefore | Validity 부분의 Not Before 정보를 추가해요. info에 대한 자세한 내용은 여기. | false | No | | info.sans | Subject Alternative Name 부분의 Subject Alternative Name 정보를 추가해요. info에 대한 자세한 내용은 여기. | false | No | | info.subject | info.subject는 X-Forwarded-Tls-Client-Cert-Info 헤더에 추가할 특정 클라이언트 인증서 subject 상세를 선택해요. info에 대한 자세한 내용은 여기. | false | No | | info.subject.country | subject에 country 정보를 추가해요. 데이터는 C 키가 있는 subject 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.subject.province | subject에 province 정보를 추가해요. 데이터는 ST 키가 있는 subject 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.subject.locality | subject에 locality 정보를 추가해요. 데이터는 L 키가 있는 subject 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.subject.organization | subject에 organization 정보를 추가해요. 데이터는 O 키가 있는 subject 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.subject.organizationalUnit | subject에 organizationalUnit 정보를 추가해요. 데이터는 OU 키가 있는 subject 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.subject.commonName | subject에 commonName 정보를 추가해요. 데이터는 CN 키가 있는 subject 부분에서 가져옵니다. | false | No | | info.subject.serialNumber | subject에 serialNumber 정보를 추가해요. 데이터는 SN 키가 있는 subject 부분에서 가져옵니다. | false | No | | info.subject.domainComponent | subject에 domainComponent 정보를 추가해요. 데이터는 DC 키가 있는 subject 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.issuer | info.issuer는 X-Forwarded-Tls-Client-Cert-Info 헤더에 추가할 특정 클라이언트 인증서 issuer 상세를 선택해요. info에 대한 자세한 내용은 여기. | false | No | | info.issuer.country | issuer에 country 정보를 추가해요. 데이터는 C 키가 있는 issuer 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.issuer.province | issuer에 province 정보를 추가해요. 데이터는 ST 키가 있는 issuer 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.issuer.locality | issuer에 locality 정보를 추가해요. 데이터는 L 키가 있는 issuer 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.issuer.organization | issuer에 organization 정보를 추가해요. 데이터는 O 키가 있는 issuer 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.issuer.commonName | issuer에 commonName 정보를 추가해요. 데이터는 CN 키가 있는 issuer 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.issuer.serialNumber | issuer에 serialNumber 정보를 추가해요. 데이터는 SN 키가 있는 issuer 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No | | info.issuer.domainComponent | issuer에 domainComponent 정보를 추가해요. 데이터는 DC 키가 있는 issuer 부분에서 가져옵니다. info에 대한 자세한 내용은 여기. | false | No |

pem

데이터 형식

구분자와 \n은 제거됩니다. 인증서가 둘 이상이면 ","로 구분됩니다.

헤더 크기

X-Forwarded-Tls-Client-Cert 헤더 값이 웹 서버 헤더 크기 제한을 초과할 수 있어요.

웹 서버의 헤더 크기 제한은 보통 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"

더 알아보기 (Learn more)