Simple Certificate Enrollment Protocol

Simple Certificate Enrollment Protocol (SCEP) 구성하기

적절한 Vault Enterprise 라이선스가 필요해요.

SCEP는 IETF 표준 프로토콜(RFC 8894)로, 클라이언트가 클라이언트 인증서와 관련 인증 기관(CA) 인증서를 취득할 수 있게 해 줍니다. PKI 플러그인을 SCEP 인증을 사용하도록 설정할 수 있어요.

출처: 문서

본문

시작하기 전에 (Before you start)

  • Vault Enterprise 1.20 이상이어야 해요.
  • JAMF Pro와 함께 사용하려면 static-challenge 인증 유형을 사용해야 해요.
  • 여러 인증 방식을 사용하려면 별도의 PKI 마운트가 있어야 해요. SCEP 구현은 주어진 PKI 마운트에 대해 한 유형의 챌린지 인증만 허용해요. 여러 인증 방식이 필요하다면, 공유 SCEP 인증 마운트 또는 별도 SCEP 인증 마운트를 가리키는 별도의 PKI 마운트를 만들어야 합니다.

1단계: 인증 방식 결정하기

Vault SCEP 구현은 두 범주의 여러 인증 메커니즘을 지원해요.

SCEP 챌린지 기반 인증의 경우, 주어진 PKI 마운트 안에서 클라이언트를 인증하는 데 정적 챌린지 또는 Intune 메커니즘 중 하나를 사용할 수 있어요. 이는 PKI 마운트의 SCEP 구성 안에서 Intune을 구성하느냐에 따라 결정되며, 그렇지 않으면 정적 챌린지로 폴백돼요.

인증서 인증은 챌린지 값이 없는 요청에 대해 선택적으로 사용할 수 있어요. 원래 챌린지 값을 요구하지 않고 인증서를 갱신하는 클라이언트에게 유용해요.

정적 챌린지와 Intune 인증 메커니즘은 같은 네임스페이스 안의 전용 SCEP 인증 마운트를 사용하고, 인증서 인증 메커니즘은 설정된 인증서 인증 마운트를 사용해요. 이 두 마운트 모두 클라이언트가 제공한 크레덴셜과 함께 클라이언트의 ACL 정책을 검증하는 데 사용됩니다.

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

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

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

path “pki/scep” {
  capabilities=[“read“, “update”, “create”]
}
path “pki/scep/pkiclient.exe” {
  capabilities=[“read“, “update”, “create”]
}

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

path “pki/roles/my-role-name/scep” {
  capabilities=[“read“, “update”, “create”]
}
path “pki/roles/my-role-name/scep/pkiclient.exe” {
  capabilities=[“read“, “update”, “create”]
}
SCEP 인증 마운트 예시
$ vault auth enable scep
$ vault write auth/scep/role/static-challenge-1 \
      auth_type="static-challenge" \
      challenge=${SCEP_PASS} \
      token_policies="access-scep" \
      token_type="batch"
$ vault auth enable cert
$ vault write auth/cert/certs/scep-ca \
      display_name="SCEP Client CA" \
      token_policies="access-scep" \
      certificate="${CERTIFICATE}" \
      token_type="batch" \
      allowed_common_names="${HOSTNAME}"
$ vault write auth/scep/role/intune \
     auth_type="intune" \
     token_policies="access-scep" \
     token_type="batch"

2단계: PKI 마운트 파라미터 튜닝하기

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

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

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

이 필드 accessor들은 마운트의 delegated auth accessors에 추가됩니다.

$ vault secrets tune \
  -delegated-auth-accessors="auth_scep_e2f4f6d5" \
  -delegated-auth-accessors="auth_cert_4088ac2d" \
  pki

3단계: SCEP 인증 마운트 구성하기

다음 예시는 두 가지 서로 다른 인증 방식을 사용해요: 인증서와 정적 시크릿 SCEP 인증.

default_path_policy는 기존 scep-clients PKI 역할을 제한과 기본값에 사용하면서, 역할 안에 지정된 발급자를 활용해요.

vault write pki_int/config/scep -<<EOC
{
  "enabled": true,
  "default_path_policy": "role:scep-clients",
  "authenticators": {
    "scep": {
      "accessor": "${SCEP_ACCESSOR}",
      "scep_role": "static-challenge-1"
    },
    "cert": {
      "accessor": "${CERT_ACCESSOR}",
      "cert_role": "scep-ca"
    }
  }
}
EOC

PKI 마운트는 서로 다른 정적 챌린지 값을 사용할 수 있어요. 이 경우 SCEP 인증 마운트에는 각각 다른 challenge 값을 가진 여러 static-challenge 역할이 구성되어야 해요. 그리고 PKI 마운트 구성은 scep_role 필드를 비워 두어, Vault가 사용 가능한 모든 SCEP 인증 역할에 대해 PKI 마운트 로그인 시도를 하도록 해야 합니다.

다음 예시는 Intune 인증과 함께 SCEP를 사용해요. SCEP 인증 마운트에는 auth_typeintune으로 설정된 역할이 구성되어 있어야 한다는 점을 기억하세요. Intune 인증 크레덴셜은 구성 안에 명시적으로 설정하거나, 환경 변수로 설정하거나, Azure 관리 ID(managed identities)를 활용할 수 있어요.

external_validation 블록 안의 모든 intune 전용 필드는 간접 값 참조(indirect value references)도 허용해요.

vault write pki_int/config/scep -<<EOC
{
  "enabled": true,
  "default_path_policy": "role:scep-clients",
  "authenticators": {
    "scep": {
      "accessor": "${SCEP_ACCESSOR}",
      "scep_role": "intune"
    }
  }
  "external_validation": {
    "intune": {
      "tenant_id": "${INTUNE_TENANT_ID}",
      "client_id": "${INTUNE_CLIENT_ID}",
      "client_secret": "${INTUNE_CLIENT_SECRET}"
    }
  }
}

참고: 내부 테스트에서 GetCACerts 요청이 발급자 CA 인증서만이 아니라 전체 인증서 체인을 반환하면 Intune 클라이언트가 CA 인증서 매칭에 실패하는 것을 발견했어요. GetCACerts 요청에 문제가 있다면, PKI 마운트 SCEP 구성의 restrict_ca_chain_to_issuer 필드를 true로 설정할 수 있어요. CA 체인을 제한하면 SCEP가 발급자 CA 인증서만 반환하도록 강제됩니다.

관리 키 지원 (Managed Key Support)

SCEP용 관리 키 지원은 Vault 2.0.1, 1.21.6, 1.20.11 버전에 추가됐어요.

SCEP는 발급자를 백업하는 같은 키에서 복호화(decryption)와 서명(signing) 기능을 요구해요. 이 요구사항 때문에 PKCS#11 RSA 관리 키만 지원해요.

관리 키를 만들 때는 다음 용도(usages)가 최소한으로 설정되어야 해요.

  • sign
  • verify
  • decrypt

PKCS#11 관리 키 통합의 추가 제한 사항으로는 PKCS1v15 암호화만 지원하는 점이에요. RSA-OEAP 암호화를 사용하려는 클라이언트는 실패할 겁니다.

제한 사항 (Limitations)

다음 Vault PKI 기능은 SCEP 통합을 지원하지 않아요.

  • 인증서 메타데이터(Certificate Metadata) - SCEP는 메타데이터를 제공할 수단이 없어요.
  • 인증서 발급 외부 정책 서비스 CIEPS
  • SCEP는 RSA 키 기반 발급자와만 호환돼요.

리소스 (Resources)

더 알아보기 (Learn more)

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