1.1 kerberos认证浅析
1、kerberos定义
1. Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。
2. Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
3. Kerberos也能达到单点登录的效果,即当Client通过了Kerberos server的认证后,便可以访问多个Real Server。
2、kerberos几个重要组件
1. KDC:负责分发密钥的密钥分配中心
2. Client:需要使用kerbores服务的客户端
3. Service:提供具体服务的服务端
3、kerberos中几个重要概念
1. Client master key: KDC中存储的Client的密钥
2. Server master key: KDC中存储的Server的密钥
3. Sclient-Server:Client与Server之间的会话密钥
4. Client Info:记录了Client本身的Ip等基本信息
4、kerberos认证交互过程
1)client从KDC获取Sclient-Server
1. 用client公钥加密Sclient-Server发送给client【Sclient-Server + Client-master-key(加密)】
2. 用server公钥加密Sclient-Server+ ClientInfo发送给client【Sclient-Server + ClientInfo + Server-master-key(加密)】
2)client用Sclient-Server加密发送数据
1. Client用自己的mClient-master-key解密KDC传过来的第一个包获得会话密钥Sclient-Server
2. 并用Sclient-Server加密自己的的信息和时间戳打包后传送给Server,此时Client开始和Server交互
3)server用私钥获取Sclient-Server,并用Sclient-Server解密client信息
1. Server会收到两个数据包,一个用会话密钥(Sclient-Server)加密,一个用自己的(Server-master-key)加密。
2. Server先用自己的Server-master-key解密获取会话密钥(Sclient-Server)和一份关于Client的信息。
3. 然后Server拿到解密后获取到的会话密钥(Sclient-Server)再解开另外一个数据包,获得另一份关于Client的信息和时间戳。
5、kerberos认证图解
6、kerberos细节
1)上面有个数据包是KDC经Client转发给Server的,为什么不直接发给Server?
1. 因为Server可能给多个Client提供服务,这样Server需要维护一个Client和会话密钥的对应表,这对Server是一个负担。
2)为什么要发两份关于Client的信息给Server?
1. 通过这两份数据的对比,Server就能判断出是不是对的Client在访问服务。
3)Client是如何判断自己在访问对的Server呢?
1. 因为Client给Server的一个数据包是用Server的master key来加密的所以只有对的Server才能解密。
4)为什么要用会话密钥
1. 通信方的master key是长期有效的,如果在网络上传输,一旦被截取,理论上来说只要有足够的时间是可以破解的。
2. 所以我们才用临时的会话密钥来通信,一段时间后会话密钥会过期,同时时间戳也防止了,恶意用户重复使用同一个数据包。
5)为什么要用时间戳?
1. 如果Client向Server传送的数据包被其他的Client截取,然后自己拿来向Server请求服务这,这样就会出问题
2. Server收到请求后将从解密后的数据包中获得的时间戳和当前时间对比,一旦超过一定范围将直接拒绝请求
1.2 kerberos常用命令
https://www.cnblogs.com/chwilliam85/p/9679845.html
https://www.cnblogs.com/kisf/p/7494203.html
1111111111111111111111111111