searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Kerberos组件基本原理

2023-09-04 05:56:18
15
0

Kerberos概述:

强大的身份验证和建立用户身份是Hadoop安全访问的基础。用户需要能够可靠地“识别”自己,然后在整个Hadoop集群中传播该身份。完成此操作后,这些用户可以访问资源(例如文件或目录)或与集群交互(如运行MapReduce作业)。除了用户之外,Hadoop集群资源本身(例如主机和服务)需要相互进行身份验证,以避免潜在的恶意系统或守护程序“冒充”受信任的集群组件来获取数据访问权限。

Hadoop使用Kerberos作为用户和服务的强身份验证和身份传播的基础。Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。 Kerberos是第三方认证机制,其中用户和服务依赖于第三方(Kerberos服务器)来对彼此进行身份验证。 Kerberos服务器本身称为密钥分发中心或KDC。 在较高的层面上,它有三个部分:

它知道的用户和服务(称为主体)及其各自的Kerberos密码的数据库

一个认证服务器(AS)执行初始认证并颁发票证授予票证(TGT)

一个票据授权服务器(TGS)发出基于初始后续服务票证TGT

一个用户主要来自AS请求认证。AS返回使用用户主体的Kerberos密码加密的TGT,该密码仅为用户主体和AS所知。用户主体使用其Kerberos密码在本地解密TGT,从那时起,直到ticket到期,用户主体可以使用TGT从TGS获取服务票据。服务票证允许委托人访问各种服务。

Kerberos简单来说就是一个用于安全认证第三方协议,它采用了传统的共享密钥的方式,实现了在网络环境不一定保证安全的环境下,client和server之间的通信,适用于client/server模型,由MIT开发和实现。

Kerberos服务是单点登录系统,这意味着您对于每个会话只需向服务进行一次自我验证,即可自动保护该会话过程中所有后续事务的安全。

由于每次解密TGT时群集资源(主机或服务)都无法提供密码,因此它们使用称为keytab的特殊文件,该文件包含资源主体的身份验证凭据。 Kerberos服务器控制的主机,用户和服务集称为领域。

认证过程:

整个Kerberos认证流程可以细化为三个阶段也可以理解为三次通信!接下来从三个阶段三次通信的角度细说认证过程。在具体描述整个认证流程之前,我们需要知道几个Kerberos认证的前提条件:

kerberos协议他是一个“限权”的认证协议,kerberos中会自带一个数据库,这个数据库会由创建kerberos的运维人员提前在库中添加好整个系统中拥有使用kerberos认证权限的用户和网络服务。在后续的认证中也是根据数据库中是否存在该用户和服务来判断该对象是否能够通过认证服务的。(拿上面的例子来说就是上帝先让C在AB相识之前同时认识A和B,以便后面帮助AB互相认证)

所有使用kerberos协议的用户和网络服务,在他们添加进kerberos系统中时,都会根据自己当前的密码(用户密码,人为对网络服务随机生成的密码)生成一把密钥存储在kerberos数据库中,且kerberos数据库也会同时保存用户的基本信息(例如用户名,用户IP地址等)和网络服务的基本信息(IP,Server Name)

kerberos中存在的三个角色,只要是发生了两两之间的通信,那么都需要先进行身份的认证

第一次通信:

为了获得能够用来访问服务端服务的票据,客户端首先需要来到KDC获得服务授予票据(Ticket)。由于客户端是第一次访问KDC,此时KDC也不确定该客户端的身份,所以第一次通信的目的为KDC认证客户端身份,确认客户端是一个可靠且拥有访问KDC权限的客户端。过程如下:

① 客户端用户向KDC以明文的方式发起请求。该次请求中携带了自己的用户名,主机IP,和当前时间戳;

② KDC当中的AS(Authentication Server)接收请求(AS是KDC中专门用来认证客户端身份的认证服务器)后去kerberos认证数据库中根据用户名查找是否存在该用户,此时只会查找是否有相同用户名的用户,并不会判断身份的可靠性;

③ 如果没有该用户名,认证失败,服务结束;如果存在该用户名,则AS认证中心便认为用户存在,此时便会返回响应给客户端,其中包含两部分内容:

第一部分内容称为TGT,他叫做票据授予票据,客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问网络服务所需的Ticket(服务授予票据),TGT中包含的内容有kerberos数据库中存在的该客户端的Name,IP,当前时间戳,客户端

即将访问的TGS的Name,TGT的有效时间以及一把用于客户端和TGS间进行通信的Session_key(CT_SK)。整个TGT使用TGS密钥加密,客户端是解密不了的,由于密钥从没有在网络中传输过,所以也不存在密钥被劫持破解的情况。

第二部分内容是使用客户端密钥加密的一段内容,其中包括用于客户端和TGS间通信的Session_key(CT_SK),客户端即将访问的TGS的Name以及TGT的有效时间,和一个当前时间戳。该部分内容使用客户端密钥加密,所以客户端在拿到该部分内容时可以通过自己的密钥解密。如果是一个假的客户端,那么他是不会拥有真正客户端的密钥的,因为该密钥也从没在网络中进行传输过。这也同时认证了客户端的身份,如果是假客户端会由于解密失败从而终端认证流程。

至此,第一次通信完成。

第二次通信:

此时的客户端收到了来自KDC(其实是AS)的响应,并获取到了其中的两部分内容。此时客户端会用自己的密钥将第二部分内容进行解密,分别获得时间戳,自己将要访问的TGS的信息,和用于与TGS通信时的密钥CT_SK。首先他会根据时间戳判断该时间戳与自己发送请求时的时间之间的差值是否大于5分钟,如果大于五分钟则认为该AS是伪造的,认证至此失败。如果时间戳合理,客户端便准备向TGS发起请求,

其次请求的主要目的是为了获取能够访问目标网络服务的服务授予票据Ticket(进入动物园需要的门票)。 在第二次通信请求中,客户端将携带三部分内容交给KDc中的TGS,第二次通信过程具体如下所述:

客户端行为:

① 客户端使用CT_SK加密将自己的客户端信息发送给KDC,其中包括客户端名,IP,时间戳;

② 客户端将自己想要访问的Server服务以明文的方式发送给KDC;

③ 客户端将使用TGS密钥加密的TGT也原封不动的也携带给KDC;

TGS行为:

① 此时KDC中的TGS(票据授予服务器)收到了来自客户端的请求。他首先根据客户端明文传输过来的Server服务IP查看当前kerberos系统中是否存在可以被用户访问的该服务。如果不存在,认证失败结束,。如果存在,继续接下来的认证。

② TGS使用自己的密钥将TGT中的内容进行解密,此时他看到了经过AS认证过后并记录的用户信息,一把Session_KEY即CT_SK,还有时间戳信息,他会现根据时间戳判断此次通信是否真是可靠有无超出时延。

③ 如果时延正常,则TGS会使用CK_SK对客户端的第一部分内容进行解密(使用CT_SK加密的客户端信息),取出其中的用户信息和TGT中的用户信息进行比对,如果全部相同则认为客户端身份正确,方可继续进行下一步。

④ 此时KDC将返回响应给客户端,响应内容包括:

第一部分:用于客户端访问网络服务的使用Server密码加密的ST(Servre Ticket),其中包括客户端的Name,IP,需要访问的网络服务的地址Server IP,ST的有效时间,时间戳以及用于客户端和服务端之间通信的CS_SK(Session Key)。

第二部分:使用CT_SK加密的内容,其中包括CS_SK和时间戳,还有ST的有效时间。由于在第一次通信的过程中,AS已将CT_SK通过客户端密码加密交给了客户端,且客户端解密并缓存了CT_SK,所以该部分内容在客户端接收到时是可以自己解密的。

至此,第二次通信完成。

第三次通信:

此时的客户端收到了来自KDC(TGS)的响应,并使用缓存在本地的CT_SK解密了第二部分内容(第一部分内容中的ST是由Server密码加密的,客户端无法解密),检查时间戳无误后取出其中的CS_SK准备向服务端发起最后的请求。

客户端:

① 客户端使用CK_SK将自己的主机信息和时间戳进行加密作为交给服务端的第一部分内容,然后将ST(服务授予票据)作为第二部分内容都发送给服务端。

服务端:

②服务器此时收到了来自客户端的请求,他会使用自己的密钥,即Server密钥将客户端第二部分内容进行解密,核对时间戳之后将其中的CS_SK取出,使用CS_SK将客户端发来的第一部分内容进行解密,从而获得经过TGS认证过后的客户端信息,此时他将这部分信息和客户端第二部分内容带来的自己的信息进行比对,最终确认该客户端就是经过了KDC认证的具有真实身份的客户端,是他可以提供服务的客户端。此时服务端返回一段使用CT_SK加密的表示接收请求的响应给客户端,在客户端收到请求之后,使用缓存在本地的CS_ST解密之后也确定了服务端的身份(其实服务端在通信的过程中还会使用数字证书证明自己身份)。

至此,第三次通信完成。此时也代表着整个kerberos认证的完成,通信的双方都确认了对方的身份,此时便可以放心的进行整个网络通信了。

0条评论
作者已关闭评论
f****n
5文章数
0粉丝数
f****n
5 文章 | 0 粉丝
原创

Kerberos组件基本原理

2023-09-04 05:56:18
15
0

Kerberos概述:

强大的身份验证和建立用户身份是Hadoop安全访问的基础。用户需要能够可靠地“识别”自己,然后在整个Hadoop集群中传播该身份。完成此操作后,这些用户可以访问资源(例如文件或目录)或与集群交互(如运行MapReduce作业)。除了用户之外,Hadoop集群资源本身(例如主机和服务)需要相互进行身份验证,以避免潜在的恶意系统或守护程序“冒充”受信任的集群组件来获取数据访问权限。

Hadoop使用Kerberos作为用户和服务的强身份验证和身份传播的基础。Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。 Kerberos是第三方认证机制,其中用户和服务依赖于第三方(Kerberos服务器)来对彼此进行身份验证。 Kerberos服务器本身称为密钥分发中心或KDC。 在较高的层面上,它有三个部分:

它知道的用户和服务(称为主体)及其各自的Kerberos密码的数据库

一个认证服务器(AS)执行初始认证并颁发票证授予票证(TGT)

一个票据授权服务器(TGS)发出基于初始后续服务票证TGT

一个用户主要来自AS请求认证。AS返回使用用户主体的Kerberos密码加密的TGT,该密码仅为用户主体和AS所知。用户主体使用其Kerberos密码在本地解密TGT,从那时起,直到ticket到期,用户主体可以使用TGT从TGS获取服务票据。服务票证允许委托人访问各种服务。

Kerberos简单来说就是一个用于安全认证第三方协议,它采用了传统的共享密钥的方式,实现了在网络环境不一定保证安全的环境下,client和server之间的通信,适用于client/server模型,由MIT开发和实现。

Kerberos服务是单点登录系统,这意味着您对于每个会话只需向服务进行一次自我验证,即可自动保护该会话过程中所有后续事务的安全。

由于每次解密TGT时群集资源(主机或服务)都无法提供密码,因此它们使用称为keytab的特殊文件,该文件包含资源主体的身份验证凭据。 Kerberos服务器控制的主机,用户和服务集称为领域。

认证过程:

整个Kerberos认证流程可以细化为三个阶段也可以理解为三次通信!接下来从三个阶段三次通信的角度细说认证过程。在具体描述整个认证流程之前,我们需要知道几个Kerberos认证的前提条件:

kerberos协议他是一个“限权”的认证协议,kerberos中会自带一个数据库,这个数据库会由创建kerberos的运维人员提前在库中添加好整个系统中拥有使用kerberos认证权限的用户和网络服务。在后续的认证中也是根据数据库中是否存在该用户和服务来判断该对象是否能够通过认证服务的。(拿上面的例子来说就是上帝先让C在AB相识之前同时认识A和B,以便后面帮助AB互相认证)

所有使用kerberos协议的用户和网络服务,在他们添加进kerberos系统中时,都会根据自己当前的密码(用户密码,人为对网络服务随机生成的密码)生成一把密钥存储在kerberos数据库中,且kerberos数据库也会同时保存用户的基本信息(例如用户名,用户IP地址等)和网络服务的基本信息(IP,Server Name)

kerberos中存在的三个角色,只要是发生了两两之间的通信,那么都需要先进行身份的认证

第一次通信:

为了获得能够用来访问服务端服务的票据,客户端首先需要来到KDC获得服务授予票据(Ticket)。由于客户端是第一次访问KDC,此时KDC也不确定该客户端的身份,所以第一次通信的目的为KDC认证客户端身份,确认客户端是一个可靠且拥有访问KDC权限的客户端。过程如下:

① 客户端用户向KDC以明文的方式发起请求。该次请求中携带了自己的用户名,主机IP,和当前时间戳;

② KDC当中的AS(Authentication Server)接收请求(AS是KDC中专门用来认证客户端身份的认证服务器)后去kerberos认证数据库中根据用户名查找是否存在该用户,此时只会查找是否有相同用户名的用户,并不会判断身份的可靠性;

③ 如果没有该用户名,认证失败,服务结束;如果存在该用户名,则AS认证中心便认为用户存在,此时便会返回响应给客户端,其中包含两部分内容:

第一部分内容称为TGT,他叫做票据授予票据,客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问网络服务所需的Ticket(服务授予票据),TGT中包含的内容有kerberos数据库中存在的该客户端的Name,IP,当前时间戳,客户端

即将访问的TGS的Name,TGT的有效时间以及一把用于客户端和TGS间进行通信的Session_key(CT_SK)。整个TGT使用TGS密钥加密,客户端是解密不了的,由于密钥从没有在网络中传输过,所以也不存在密钥被劫持破解的情况。

第二部分内容是使用客户端密钥加密的一段内容,其中包括用于客户端和TGS间通信的Session_key(CT_SK),客户端即将访问的TGS的Name以及TGT的有效时间,和一个当前时间戳。该部分内容使用客户端密钥加密,所以客户端在拿到该部分内容时可以通过自己的密钥解密。如果是一个假的客户端,那么他是不会拥有真正客户端的密钥的,因为该密钥也从没在网络中进行传输过。这也同时认证了客户端的身份,如果是假客户端会由于解密失败从而终端认证流程。

至此,第一次通信完成。

第二次通信:

此时的客户端收到了来自KDC(其实是AS)的响应,并获取到了其中的两部分内容。此时客户端会用自己的密钥将第二部分内容进行解密,分别获得时间戳,自己将要访问的TGS的信息,和用于与TGS通信时的密钥CT_SK。首先他会根据时间戳判断该时间戳与自己发送请求时的时间之间的差值是否大于5分钟,如果大于五分钟则认为该AS是伪造的,认证至此失败。如果时间戳合理,客户端便准备向TGS发起请求,

其次请求的主要目的是为了获取能够访问目标网络服务的服务授予票据Ticket(进入动物园需要的门票)。 在第二次通信请求中,客户端将携带三部分内容交给KDc中的TGS,第二次通信过程具体如下所述:

客户端行为:

① 客户端使用CT_SK加密将自己的客户端信息发送给KDC,其中包括客户端名,IP,时间戳;

② 客户端将自己想要访问的Server服务以明文的方式发送给KDC;

③ 客户端将使用TGS密钥加密的TGT也原封不动的也携带给KDC;

TGS行为:

① 此时KDC中的TGS(票据授予服务器)收到了来自客户端的请求。他首先根据客户端明文传输过来的Server服务IP查看当前kerberos系统中是否存在可以被用户访问的该服务。如果不存在,认证失败结束,。如果存在,继续接下来的认证。

② TGS使用自己的密钥将TGT中的内容进行解密,此时他看到了经过AS认证过后并记录的用户信息,一把Session_KEY即CT_SK,还有时间戳信息,他会现根据时间戳判断此次通信是否真是可靠有无超出时延。

③ 如果时延正常,则TGS会使用CK_SK对客户端的第一部分内容进行解密(使用CT_SK加密的客户端信息),取出其中的用户信息和TGT中的用户信息进行比对,如果全部相同则认为客户端身份正确,方可继续进行下一步。

④ 此时KDC将返回响应给客户端,响应内容包括:

第一部分:用于客户端访问网络服务的使用Server密码加密的ST(Servre Ticket),其中包括客户端的Name,IP,需要访问的网络服务的地址Server IP,ST的有效时间,时间戳以及用于客户端和服务端之间通信的CS_SK(Session Key)。

第二部分:使用CT_SK加密的内容,其中包括CS_SK和时间戳,还有ST的有效时间。由于在第一次通信的过程中,AS已将CT_SK通过客户端密码加密交给了客户端,且客户端解密并缓存了CT_SK,所以该部分内容在客户端接收到时是可以自己解密的。

至此,第二次通信完成。

第三次通信:

此时的客户端收到了来自KDC(TGS)的响应,并使用缓存在本地的CT_SK解密了第二部分内容(第一部分内容中的ST是由Server密码加密的,客户端无法解密),检查时间戳无误后取出其中的CS_SK准备向服务端发起最后的请求。

客户端:

① 客户端使用CK_SK将自己的主机信息和时间戳进行加密作为交给服务端的第一部分内容,然后将ST(服务授予票据)作为第二部分内容都发送给服务端。

服务端:

②服务器此时收到了来自客户端的请求,他会使用自己的密钥,即Server密钥将客户端第二部分内容进行解密,核对时间戳之后将其中的CS_SK取出,使用CS_SK将客户端发来的第一部分内容进行解密,从而获得经过TGS认证过后的客户端信息,此时他将这部分信息和客户端第二部分内容带来的自己的信息进行比对,最终确认该客户端就是经过了KDC认证的具有真实身份的客户端,是他可以提供服务的客户端。此时服务端返回一段使用CT_SK加密的表示接收请求的响应给客户端,在客户端收到请求之后,使用缓存在本地的CS_ST解密之后也确定了服务端的身份(其实服务端在通信的过程中还会使用数字证书证明自己身份)。

至此,第三次通信完成。此时也代表着整个kerberos认证的完成,通信的双方都确认了对方的身份,此时便可以放心的进行整个网络通信了。

文章来自个人专栏
大数据运维
5 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0