KrbException: no supported default etypes for default_tkt_enctypes
서비스를 재기동하거나 keytab 으로 인증할 때 나온다. 클라이언트가 요청할 수 있는 암호화 유형(enctype)과 KDC · keytab 이 가진 유형에 겹치는 것이 없다는 뜻이다.
| 위치 | 확인 방법 |
|---|---|
클라이언트 설정 /etc/krb5.conf |
default_tkt_enctypes · default_tgs_enctypes · permitted_enctypes |
| KDC 가 프린시펄에 대해 가진 키 | kadmin: getprinc <프린시펄> 출력의 Key: vno n, <enctype> |
| keytab 파일 | klist -kte /path/to.keytab |
세 목록의 교집합이 비면 위 오류가 난다. klist -e 는 이미 발급받은 티켓의 유형을 보여줄 뿐 지원 목록이 아니므로, 지원 여부 확인에 쓰면 안 된다.
klist -kte /etc/security/keytabs/kafka.service.keytab
kadmin -q "getprinc kafka/host.example.com@EXAMPLE.COM"
공식 문서 기준으로 약한 알고리즘은 이미 제거되었거나 기본 비활성이다.
des-cbc-crc 등)는 krb5 1.18 에서 완전히 제거되었다. 1.8 부터는 기본 비활성이었다.des3-cbc-sha1)는 1.17 에서 deprecated 이고, allow_des3 기본값이 1.21 에서 false 다.arcfour-hmac)도 1.17 에서 deprecated 이며 allow_rc4 기본값이 1.21 에서 false 다.allow_weak_crypto 는 1.8 부터 기본 false 이며, true 로 바꾸면 위 약한 유형이 각 목록에 다시 들어온다.permitted_enctypes 가 나머지 두 값의 기본값 역할을 한다.따라서 오래된 문서를 보고 des-cbc-md5 · rc4-hmac 을 krb5.conf 에 적어 두면, 새 krb5 에서는 그 목록이 통째로 무효가 되어 이 오류로 이어진다.
# /etc/krb5.conf
[libdefaults]
default_realm = EXAMPLE.COM
# 아래 세 줄은 특별한 호환 요구가 없으면 지운다
# default_tkt_enctypes = ...
# default_tgs_enctypes = ...
# permitted_enctypes = ...
공식 문서도 "특정 하위 호환 목적이 아니면 설정하지 말라"고 안내한다. 값을 고정해 두면 KDC 가 더 강한 유형을 지원하게 되어도 클라이언트가 쓰지 못한다.
목록을 반드시 명시해야 하는 환경이면 AES 계열만 남긴다.
[libdefaults]
permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
AES-SHA2 계열(aes256-cts-hmac-sha384-192)은 옛 자바 클라이언트가 지원하지 않는다. 그 사례는 Kerberos Encryption type Unknown (20) 에 있다.
설정을 고쳐도 keytab 이 옛 유형의 키만 담고 있으면 그대로 실패한다. keytab 은 만들 때의 유형이 박제된다.
kadmin -q "ktadd -k /etc/security/keytabs/kafka.service.keytab kafka/host.example.com@EXAMPLE.COM"
klist -kte /etc/security/keytabs/kafka.service.keytab
ktadd 는 키 버전(kvno)을 올리므로 같은 프린시펄을 쓰는 다른 노드의 keytab 도 함께 갱신해야 한다. 한 대만 다시 만들고 끝내면 나머지가 Key version number for principal in key table is incorrect 로 실패한다.
AD 는 계정 속성에서 지원 유형을 정한다. msDS-SupportedEncryptionTypes 에 AES 가 켜져 있지 않으면 AES 키가 만들어지지 않는다. 도메인 관리자에게 해당 서비스 계정의 AES 128 · 256 지원을 켜 달라고 요청하고, 속성을 바꾼 뒤에는 비밀번호를 재설정해야 AES 키가 생성된다.
Cloudera 같은 제품은 설정 화면에서 허용하는 문자열 목록이 따로 있다(aes256-cts · aes128-cts · rc4-hmac 등). 여기에 값을 넣는다고 KDC 나 keytab 이 바뀌지는 않는다. 제품 설정 · krb5.conf · keytab · KDC 네 곳이 같은 유형을 가리키는지를 확인하는 것이 순서다.
# 티켓을 받아 실제 사용된 유형 확인
kinit -kt /etc/security/keytabs/kafka.service.keytab kafka/host.example.com@EXAMPLE.COM
klist -e
# 상세 추적
KRB5_TRACE=/dev/stderr kinit -kt <keytab> <principal>
KRB5_TRACE 는 어떤 유형을 제안했고 KDC 가 무엇을 거절했는지까지 보여 주므로 원인 확정에 가장 빠르다.