인증서 관리 프로토콜 v2

인증서 관리 프로토콜 v2 (CMPv2)

이 문서는 Vault PKI 시크릿 엔진이 구현하는 CMPv2 프로토콜, 그 설정과 제한 사항을 요약해요.

출처: 문서

본문

CMPv2(Certificate Management Protocol v2)란 무엇인가요?

CMP 프로토콜은 IETF 표준 프로토콜로 RFC 4210에 정의되어 있어요. 클라이언트가 클라이언트 인증서와 관련 인증 기관(CA) 인증서를 취득할 수 있게 해 줍니다.

Vault PKI 마운트에서 CMPv2 지원 활성화하기

기존 마운트가 CMPv2 클라이언트를 서비스하도록 구성하는 데는 다음 단계가 필요하며, 크게 네 가지 범주로 나뉘어요.

  1. 발급자(Issuer) 구성
  2. 인증 메커니즘 (Authentication mechanisms)
  3. PKI 튜너블 파라미터 갱신 (Updating PKI tunable parameters)
  4. PKI CMPv2 설정 (PKI CMPv2 configuration)

발급자 구성하기

CMPv2는 약간 특이한데, 발급자 CA 인증서를 사용해 CMP 메시지에 서명하기 때문이에요. 즉, 발급자가 DigitalSignature 키 용도(key usage)를 가져야 합니다. 기존 CA 발급자는 보통 이 속성이 없으므로, 이 속성을 가진 새 발급자(아마도 중간 발급자)를 생성해야 해요. PKI를 처음 구성하거나 새 발급자를 만들 때는 예를 들어 key_usageCRL,CASign,DigitalSignature로 설정하세요.

중간 발급자 CSR 생성을 참고하세요.

CMPv2 인증 구성하기

현재 Vault의 CMPv2 구현은 인증서 TLS 인증만 지원해요. 클라이언트가 TLS 클라이언트 인증서의 소유를 증명하면 Vault에 인증됩니다.

인증은 같은 네임스페이스 안의 별도 Vault 인증 마운트를 활용해서, 클라이언트가 제공한 크레덴셜과 함께 시행할 클라이언트의 ACL 정책을 검증해요.

정확한 회계를 위해 CMPv2 인증을 지원하는 마운트는 이 용도로 전용으로 사용하고 다른 워크플로와 공유하지 않아야 해요. 즉, 다른 용도로 사용 중인 인증 마운트가 이미 있더라도 CMPv2용 새 인증서 인증 마운트를 만들어 주세요.

CMPv2 클라이언트용 인증 마운트를 설정할 때는 토큰 타입이 배치 토큰(batch tokens)을 반환하도록 구성해야 해요. CMPv2로 들어오는 모든 요청을 인증해야 하므로, 과도한 리스가 생성되고 영속되는 것을 피하려면 배치 토큰이 필요해요.

ACL 정책 안의 경로는 PKI 마운트 아래의 cmp 경로와 일치해야 해요. 사용할 경로는 기본 cmp 경로이거나 역할 기반 경로일 수 있어요.

경로 정책으로 sign-verbatim을 사용한다면, 다음 ACL 정책이 인증된 클라이언트가 필요한 PKI CMP 경로에 접근할 수 있게 해 줘요.

path “pki/cmp” {
  capabilities=[“update”, “create”]
}

역할 기반 경로 정책에는 다음 예시 정책을 사용할 수 있어요.

path “pki/roles/my-role-name/cmp” {
  capabilities=[“update”, “create”]
}

PKI 마운트 튜너블 파라미터 갱신하기

인증 마운트를 만들고 설정한 뒤에는, 인증 마운트의 accessor를 캡처해서 PKI 마운트의 위임 인증 accessors에 추가해야 해요.

인증 마운트의 accessor 필드를 얻으려면 다음 명령을 사용하면 됩니다.

$ vault read -field=accessor sys/auth/auth/cert

일부 클라이언트에서 CMP가 동작하려면 몇몇 응답 헤더를 명시적으로 허용하고, 후행 슬래시(trailing slashes)를 정리하며, 마운트가 인증을 위임할 수 있는 accessor 목록을 구성해야 해요. 다음 명령은 필요한 응답 헤더를 부여하며, delegated-auth-accessors 값은 여러분의 값에 맞게 교체해 주세요.

$ vault secrets tune \
  -allowed-response-headers="Content-Transfer-Encoding" \
  -allowed-response-headers="Content-Length" \
  -allowed-response-headers="WWW-Authenticate" \
  -delegated-auth-accessors="auth_cert_4088ac2d" \
  -trim-request-trailing-slashes="true" \
  pki

CMPv2 활성화하기

CMP를 활성화하는 것은 config/cmp 엔드포인트에 쓰기(write)를 해서, enabled로 설정하고 기본 경로 정책과 인증을 구성하는 것을 의미해요.

vault write pki/config/cmp -<<EOC
{
  "enabled": true,
  "default_path_policy": "role:example-role",
  "disabled_validations": [],
  "authenticators": {
    "cert": {
      "accessor": "auth_cert_4088ac2d"
    }
  },
  "audit_fields": ["common_name", "alt_names", "ip_sans", "uri_sans"]
}
EOC

물론 여러분 자신의 역할과 accessor 값으로 바꿔 주세요. 이렇게 하면 CMP 엔드포인트가 이전에 구성한 Cert Auth 방식으로 인증된 클라이언트 요청을 처리할 수 있게 됩니다.

제한 사항 (Limitations)

CMPv2 지원의 초기 릴리스는 의도적으로 프로토콜의 하위 집합으로 제한되며, HTTP를 통한 Initialization, Certification, Key Update를 다룹니다. 구체적으로 다음은 아직 지원되지 않아요.

  • PasswordBasedMac을 사용한 기본 인증 방식
  • 폐기(Revocation)
  • CMP 자체를 통한 CRL 조회
  • CA 생성/갱신 작업

CMPv2는 다음 기존 Vault PKI 기능과 통합되지 않는다는 점도 참고하세요.

  • 인증서 메타데이터(Certificate Metadata) - CMPv2는 메타데이터를 제공할 수단이 없어요.
  • 인증서 발급 외부 정책 서비스 CIEPS

더 알아보기 (Learn more)

  • CMP 프로토콜 명세는 RFC 4210에서 확인하세요.
  • PKI 시크릿 엔진 전체 API는 PKI API 문서를 참고하세요.