kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下,kerberos作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
kerberos和NTLM的区别:
在kerberos之前,Microsoft使用一种称为NTLM的身份验证技术。NTLM代表NT LAN Manager,是一种质询响应身份验证协议。目标计算机或域控制器会质询并检查密码,并存储密码哈希以供继续使用。这两个系统之间的最大区别是第三方验证和kerberos中更强大的加密功能。该过程中的这一额外步骤为NTLM提供了重要的额外安全层。
AS(Authentication Server)== 认证服务器
KDC(Key Distribution Server)== 密钥分发中心
TGT(Ticket Granting Ticket)== 票据授权票据,票据的票据
TGS(Ticket Granting Sever)== 票据授权服务器
SS(Service Server)== 特定服务提供端
具体的kerberos认证流程:
一、从AS服务器中获取TGT票据
用户在客户端输入账号和密码之后,会对密码进行hash处理,作为user-secret-key
1、客户端将用户名发送给AS服务器申请服务,在AS服务器中会对用户名进行验证,在AS服务器本地数据库中查询到该用户名的密码,并使用hash生成user-secret-key。
2、AS服务器向用户发送两个信息:
①Client/TGS会话秘钥,使用user-secret-key进行加密
②TGT,包含TGS会话密钥,用户信息,时间戳,TGT有效期。使用TGS密钥进行加密
3、用户接收到消息之后,会使用本地的user-secret-key对消息1进行解密,如果解密成功,说明用户提供的凭据是正确的,此时用户得到了加密后的TGT。
二、从TGS服务器中获取访问权限
1、客户端向TGS服务器发送信息:
①第一步骤中的TGT
②认证信息(认证符Authenticator),包含用户id以及时间戳,通过TGS会话密钥进行加密。
2、TGS服务器收到消息后,会使用TGS密钥对消息1进行解密,获取到TGS会话密钥,进而对消息2进行解密,再对用户id以及时间戳进行认证,如果认证成功,向客户端发送消息
①client-server-ticket(包含SS会话密钥,用户名信息以及时间戳),使用SS密钥进行加密
②SS会话密钥使用TGS会话密钥进行加密
3、客户端收到信息后会对消息2进行解密,获得SS会话密钥。
三、访问服务
1、客户端向SS服务器发送以下消息:
①第二步骤中的client-server-ticket
②新的Authenticator,包含用户信息,时间戳。通过SS会话密钥进行加密
2、SS服务器收到消息后,会使用SS密钥对消息1进行解密,解密后使用SS会话密钥对消息2解密,解密成功后会得到Authenticator,认证之后,发送:
①新时间戳,client发送的时间戳加1,通过SS会话密钥进行加密
3、客户端收到时间戳后,确认解密,成功之后发送服务请求
4、SS服务器收到之后提供服务