一、基本概念
1、Kerberos 是什么?
Kerberos 是一个网络身份验证协议,用于在计算机网络中进行身份验证和授权。它提供了一种安全的方式,允许用户在不安全的网络上进行身份验证,并获取访问网络资源的权限。
2、Kerberos 的基本原理:
Kerberos 使用密钥分发中心(Key Distribution Center,KDC)来管理认证过程。KDC 包含两个组件:身份认证服务器(Authentication Server,AS)和票据授权服务器(Ticket Granting Server,TGS)。
用户首先向 AS 发送用户名和密码进行身份验证。如果验证成功,AS 会向用户颁发一个票据授权票(Ticket Granting Ticket,TGT)。
用户在访问特定服务时,使用 TGT 请求 TGS 颁发一个服务票据(Service Ticket)。
TGS 根据 TGT 验证用户身份,并颁发一个用于访问特定服务的服务票据。
用户使用服务票据向服务请求访问,并在访问过程中进行相应的身份验证。
3、Kerberos 认证的优势:
相比传统的明文密码认证方式,Kerberos 提供了更强的安全性。用户密码不会在网络中传输,而是在 Kerberos 协议中使用密钥进行加密和传输。
Kerberos 提供单点登录(Single Sign-On,SSO)功能,用户只需在登录时进行一次身份验证,然后可以在网络中访问多个服务而无需重新输入密码。
Kerberos 使用票据来进行授权,减少了对身份验证服务器的频繁访问,提高了性能和可扩展性。
4、Kerberos 实现的要素:
主体(Principal):表示一个被 Kerberos 认可的实体,可以是用户、服务或服务器。
密钥分发中心(Key Distribution Center,KDC):包含身份认证服务器(AS)和票据授权服务器(TGS),负责颁发票据和验证身份。
票据授权票(Ticket Granting Ticket,TGT):由 AS 颁发给用户,用于请求服务票据。
服务票据(Service Ticket):由 TGS 颁发给用户,用于访问特定服务。
5、Kerberos 在实际应用中的使用场景:
在企业网络中进行用户身份验证和单点登录。
在分布式系统中实现跨域用户身份验证和授权。
在云环境中确保用户和服务之间的安全通信。
6、Kerberos 认证流程:
用户向身份认证服务器(AS)发送用户名和密码进行身份验证请求。
AS 验证用户的身份,并生成一个会话密钥(Session Key)作为票据授权票(TGT)的一部分。
AS 将 TGT 加密并发送给用户。
用户收到 TGT 后,保存在本地,并在需要访问服务时使用。
用户向票据授权服务器(TGS)发送 TGT 请求服务票据。
TGS 验证用户的身份,生成一个服务票据并用 TGS 的密钥对其加密。
TGS 将服务票据发送给用户。
用户收到服务票据后,将其发送给目标服务。
目标服务使用自己的密钥解密服务票据并验证用户的身份。
如果验证成功,目标服务向用户提供所需的服务。
7、Kerberos 中的密钥:
Kerberos 使用密钥来保证身份验证和票据的安全性。
用户和身份认证服务器之间有一个共享的密码密钥(Password Key)。
用户和票据授权服务器之间有一个共享的票据授权服务密钥(TGS Session Key)。
用户和每个服务之间有一个共享的会话密钥(Session Key)。
这些密钥用于加密票据和提供安全通信。
8、Kerberos 的实现和支持:
Kerberos 是一个开放标准,有多种实现和支持。
MIT Kerberos:MIT(麻省理工学院)开发和维护的开源 Kerberos 实现,被广泛应用于各种操作系统和应用程序。
Microsoft Active Directory:微软的域控制器和身份认证解决方案使用 Kerberos 作为其身份验证协议。
其他厂商和开发者也提供了各种 Kerberos 实现和集成支持。
简化认证流程图:
二、举例
1、如果用户想访问hadoop集群?
1、在 Kerberos 认证中,用户和 Hadoop 各个组件(如HDFS、YARN等)都需要在身份认证服务器(AS)中进行注册,以建立相应的主体(Principal)和密钥。
2、用户使用 kinit 命令输入账号和密码进行身份验证。
如果认证通过,AS 会颁发一个 TGT(Ticket Granting Ticket),它是一个加密的票据,代表用户的身份验证成功,并且可以用于请求服务票据。
3、当用户需要访问 Hadoop 集群中的某个组件时(如HDFS、YARN),用户向票据授权服务器(TGS)发送 TGT 请求服务票据。
4、TGS 验证用户的身份,并生成一个服务票据(Service Ticket),该票据是针对特定服务的,TGS 将服务票据发送给用户。
5、用户收到服务票据后,向目标服务(如HDFS、YARN)发送服务票据,表示对该服务的请求。
6、目标服务使用自己的密钥解密服务票据,并验证用户的身份和授权。如果验证通过,目标服务向用户提供所需的服务,如访问 HDFS 文件或执行 YARN 作业。
总体来说,Kerberos 提供了一种安全的方式,确保用户可以在集群中进行身份验证,并且通过票据授权访问特定的服务。如果用户通过身份验证并且拥有有效的票据,就可以与集群进行安全通信和访问。
三、Kerberos 认证的主要方式
1、使用 kinit 命令进行认证:
kinit 是 Kerberos 提供的命令行工具,用于向身份认证服务器(AS)发送认证请求,并获取 TGT(Ticket Granting Ticket)票据。
当你使用 kinit 命令时,会被提示输入用户名和密码。这些凭据将被发送给 AS 进行身份验证。
如果认证成功,kinit 会将 TGT 票据保存在你的本地凭据缓存中(通常是一个加密的票据文件),以便后续的服务票据请求和访问。
2、保存票据进行认证:
一旦你通过 kinit 命令获取了 TGT 票据,你可以选择将票据保存在本地,并在需要访问服务时使用它。保存票据可以通过不同的方式,比如将 TGT 票据文件存储在特定的位置,如默认的票据缓存文件夹。当你需要访问服务时,你可以使用保存的票据进行认证,而无需重新进行用户名和密码的身份验证。
需要注意的是,保存票据的方式仍然依赖于 kinit 命令的执行来获取初始的 TGT 票据。一旦你拥有有效的 TGT 票据,你可以在一定时间内多次使用它进行访问,而无需重复进行身份验证。
总之,使用 kinit
命令进行认证是获取 TGT 票据的初始步骤,而保存票据则是在一段时间内持久化这个票据,并在需要访问服务时使用它进行认证。这两种方式共同构成了 Kerberos 认证的流程。
四、保存票据进行认证的时效性
1、通过 Kerberos 认证,你只需要在一定时间内输入一次密码进行身份验证,获取到有效的 TGT(Ticket Granting Ticket)票据。这个 TGT 票据可以用于在一段时间内多次访问不同的服务而无需重复输入密码。
2、一旦获得了 TGT 票据,你可以使用它向票据授权服务器(TGS)请求服务票据。服务票据是特定服务的授权凭证,它由 TGS 使用服务的密钥对其进行加密生成,并只能由该服务解密和验证。
3、当你需要访问特定服务时,你只需将相应的服务票据提供给服务即可,无需再次输入密码。服务会使用自己的密钥解密服务票据,验证你的身份和授权,然后提供相应的服务。
4、这种方式在一定程度上简化了认证过程,减少了密码输入的次数,提高了安全性。通过票据进行访问不仅方便,还提供了加密和授权机制,确保了通信的安全性和合法性。
也就是说在这个过程中,双方的登录主要是为了确保 TGT 票据的时效性,以便在一段时间内进行多次访问而无需重复登录。而具体的访问则是通过服务票据的加密和解密来实现安全通信和授权访问。