Kerberos 简介
Kerberos 简介
why
Kerberos 是一种身份认证协议,被广泛运用在大数据生态中,甚至可以说是大数据身份认证的事实标准。
Kerberos 是什么?
Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成:Key Distribution Center (即KDC)、Client 和 Service。
客户端会先访问两次KDC,然后再访问目标Service,如:HTTP服务。
Kerberos 基本概念
名词 | 解释 |
---|---|
Principal | 大致可以认为是 Kerberos 世界的用户名,用于标识身份。 |
Keytab | "密码本"。包含了多个 principal 与密码的文件,用户可以利用该文件进行身份认证。 |
Ticket Cache | 客户端与 KDC 交互完成后,包含身份认证信息的文件,短期有效,需要不断renew。 |
Realm | Kerberos 系统中的一个namespace。不同 Kerberos 环境,可以通过 realm 进行区分。 |
Principal
principal 主要由三部分构成:primary,instance(可选) 和 realm。
primary 又称为用户 user component,可以是任意的字符串或者就是操作系统下的用户名等等。
然后接着的部分叫做 instance,是用来给某个角色的用户或者服务来创建 principal 的。一个 instance,会被 "/" 和 primary 分隔。
最后一个部分是 realm,概念上很像 DNS 上的 domain 域名,可以用来定义一组相似的对象,也可以说 realm 定义了一组 principals。每一个 realm 可以有私有的配置,包括 KDC 的地址和加密的算法,都可以独立存在。
Keytabs
Keytab 就是一个包含了(若干)principals 和一个加密了的 principal key的文件。
一个 Keytab 文件每个 host 都是唯一的,因为 principal 的定义了包含了 hostname 的。
这个文件可以用来认证,而不需要传递公开的密码,因为只要有这个 Keytab 就可以代表这个 principal 来操作 Hadoop 的服务。
所以说 Keytab 是需要保管好的。
KDC
Key Distribution Center(即 KDC), 是 Kerberos 的核心组件。
主要由三个部分组成:
- Kerberos Database: 包含了一个 Realm 中所有的 principal、密码与其他信息。(默认:Berkeley DB)
- Authentication Service(AS): 进行用户信息认证,为客户端提供 Ticket Granting Tickets(TGT)。
- Ticket Granting Service(TGS): 验证 TGT 与 Authenticator,为客户端提供 Service Tickets。
Kerberos 协议的前提
- uses tickets to authenticate:Kerberos 基于 Ticket 实现身份认证,而非密码。如果客户端无法利用本地密钥,解密出 KDC 返回的加密Ticket,认证将无法通过。
- 客户端将依次与 Authentication Service, Ticket Granting Service 以及目标Service进行交互,共三次交互。
- 客户端与其他组件交互,都将获取到两条信息,其中一条可以通过本地密钥解密出,另外一条将无法解密出。
- 客户端想要访问的目标服务,将不会直接与KDC交互,而是通过能否正确解密出客户端的请求来进行认证。
- KDC Database 包含有所有 principal 对应的密码。
- built on symmetric-key cryptography:Kerberos 中信息加密方式一般是对称加密(可配置成非对称加密,比如配置成公钥加密)。