kerberos认证机制介绍
Kerberos简介
Kerberos协议是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止replay攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。Kerberos的扩展产品也使用公开密钥加密方法进行认证。
参考:http://zh.wikipedia.org/wiki/Kerberos
Kerberos官方网站:http://web.mit.edu/kerberos
认证过程简介
实际场景介绍
• 1. 用户开始登录,输入用户名,KDC收到用户名,在用户数据库中查找这个用户,结果发现了这个用户。
• 2. KDC生成一个KDC跟这个登录用户之间共享的一个会话口令(Session key),这个口令只有KDC跟这个登录用户之间使用,用来做相互验证对方使用。同时KDC给这个登录用户生成一个票据授权票(ticket- granting ticket),客户端以后就可以凭这个票据授权票来向KDC请求其他的票据,而不用再次验证自己的身份了。KDC把{ Session key + ticket-granting ticket }用登录用户的口令加密后发回到客户端。
• 3. 客户端用自己的口令解密KDC返回的数据包,如果解密正确则验证成功。解密后能够获得登录用户与验证服务器共享的Session key和一张ticket-granting ticket。 到此,登录用户没有在网络上发送口令,通过KDC使用用户口令加密验证授权票的方法验证了用户,用户跟KDC之间建立了关系,在客户端也保存了相应的身份证明,以后要是用网络中的其他服务,可以通过这个身份证明向KDC申请相应服务器的服务票,来获得相应服务身份验证。
• 4. 如果用户第一次访问namenode,客户端的kinit查看本机上没有访问namenode服务器的授权票,于是kinit会向KDC发出请求,请求访问namenode服务的授权票。kinit先要生成一个验证码,验证码是这样的:{用户名:客户端地址}用跟KDC间的Session key加密。Kinit将验证码、票据授权票、你的名字、你的客户端地址、namenode服务名字发送给KDC,KDC验证授权票真实有效,然后用跟 你共享的Session key解开验证码,获取其中的用户名和地址,与发送这个请求的用户和地址比较,如果相符,说明验证通过,这个请求合法。
• 5. KDC先生成这个用户跟namenode服务器之间的Session key会话口令,之后根据用户请求生成访问namenode服务器的授权票,包含{会话口令:用户名:用户机器地址:服务名:有效期:时间戳},这个授权票用 namenode服务器的密码(KDC知道所有授权服务的密码)进行加密形成最终的授权票。最后,KDC将{会话口令+加好密的授权票}用用户口令加密后发送 给用户。
• 6. 客户端收到KDC返回的数据包,用自己的口令解密,获得跟namenode服务器的Session key和namenode服务器的授权票。
• 7. 客户端kinit同样要生成一个验证码,包含:{用户名:用户地址}用跟namenode服务器间的Session key加密。将验证码和namenode授权票一起发送到namenode服务器。
• 8. namenode服务器先用自己的服务器密码解开namenode授权票,如果解密成功,说明此授权票真实有效,然后查看此授权票是否在有效期内,在有效期内,用授权票中带的 会话口令去解密验证码,获得其中的用户名和客户端地址,如果跟授权票中的用户名和地址相符则说明发送此验证票的用户就是授权票的所有者,从而验证本次请求 有效。
实际应用
对应kerberos认证的第一步,客户端向kdc获取票据,对应Kdc日志
Jul 15 11:38:35 XXX-XXX-XXX-XXX krb5kdc[3815](info): AS_REQ (1 etypes {18}) xxx.x.xxx.xxx: ISSUE: authtime 1373859515, etypes {rep=18 tkt=18 ses=18}, hdfs/hadoop@HADOOP.COM for krbtgt/HADOOP.COM@HADOOP.COM
Namenode启动时会使用hdfs/hadoop@HADOOP.COM到kdc来进行认证。
对应kerberos认证的第二步,客户端向kdc获取服务端st,对应kdc 日志
Jul 15 11:38:35 XXX-XXX-XXX-XXX krb5kdc[3815](info): TGS_REQ (6 etypes {3 1 23 16 17 18}) xxx.x.xxx.xxx: ISSUE: authtime 1373859515, etypes {rep=18 tkt=18 ses=23}, hdfs/hadoop@HADOOP.COM for zookeeper/hadoop@HADOOP.COM
Namenode启动后会需要连接zookeeper服务从而触发到kdc获取zookeeper服务st的过程。
- 点赞
- 收藏
- 关注作者
评论(0)