一、kerberos定义html
1. Kerberos 是一种网络认证协议,其设计目标是经过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。服务器
2. Kerberos 做为一种可信任的第三方认证服务,是经过传统的密码技术(如:共享密钥)执行认证服务的。网络
3. Kerberos也能达到单点登陆的效果,即当Client经过了Kerberos server的认证后,即可以访问多个Real Server。加密
二、kerberos几个重要组件spa
1. KDC:负责分发密钥的密钥分配中心设计
2. Client:须要使用kerbores服务的客户端server
3. Service:提供具体服务的服务端htm
三、kerberos中几个重要概念blog
1. Client master key: KDC中存储的Client的密钥get
2. Server master key: KDC中存储的Server的密钥
3. Sclient-Server:Client与Server之间的会话密钥
4. Client Info:记录了Client自己的Ip等基本信息
四、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的信息和时间戳。
五、kerberos认证图解
六、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收到请求后将从解密后的数据包中得到的时间戳和当前时间对比,一旦超过必定范围将直接拒绝请求
http://www.javashuo.com/article/p-vekswuot-co.html
http://www.javashuo.com/article/p-pgpapsfx-cx.html
1111111111111111111111111111