系统运维专家

ssh单点登入解决方案

2019-06-24  本文已影响0人  无聊的上帝op

需求:

服务器的访问权限,实现无密码登入.

存在痛点:

应用场景图:

image.png

双向认证流程:

  1. APPServices保存Long-term Key
  2. Client 向Kerberso请求 APPService1 ssh权限
  3. 为了保证 Short-term Key 只能被 client1 和 server1 安全使用, Kerberos 找到 client1 和 server1 对应的 Long-term Key,假设就是它们密码对应生成的哈希值 hash-c 和 hash-s。然后 Kerberos 会将SKc&s= E hash-c( SKc&s) 的加密结果发送给 client,将 Session Ticket = E hash-s( SKc&s+部分 client 的信息) 的加密结果同样发送给 client
  4. client 解密hash-c 作为密钥加密的数据包,获得SKc&s。client 将自己的部分信息和 Timestamp 利用 SKc&s 执行加密,即 Authenticator = E SKc&s(部分client的信息+ Timestamp)。把 Authenticator 和 AD那里得到的 Session Ticket 都转发给 server1
  5. server1 利用 hash-s 解开Session Ticke 得到SKc&s,表达式就是:SKc&s+部分 client 的信息= D hash-s( Session Ticke )。再有 D SKc&s ( Authenticator ) 得到来自 client1 的信息和 Timestamp
  6. server1 在比较来自 Session Ticke 和 Authenticator 都包含的 client1 信息是否一致之前,会先检查 Timestamp 的时间和当前系统时间做比较,如果两者的时间相差超过设定阈值就认为数据包失效,不再进行比较 client1 的信息而直接拒绝认证,防止重放攻击。为此,server1 中会维护一张时间表,里面记录许多 client 最近一次的认证时间,如果 Timestamp 时间晚于最近认证的时间,server1 才会继续后续验证,所以域环境下的Time Synchronization 也会干预认证结果
  7. ( optional ) 如果 client1 需要确认通信的 server 是否就是我想要访问的 server1,那么就需要在向 server1 发送的登录凭证里设置 Flag 字段信息。当 server 1 看到有 Flag 字段信息时,就会把来自 client1 的Timestamp 信息用 SKc&s 做加密并把结果发送给 client1 ,client1 解密之后如果 Timestamp 和本机记录一样,则认为 server1 就是我想访问的 server 。因为要拿到 Timestamp 信息需要解开 Authenticator 数据包,解开Authenticator 需要 SKc&s,而获得 SKc&s 要么拥有hash-c,要么拥有hash-s。

密码学知识:

参考文档:

https://blog.csdn.net/wulantian/article/details/42418231

Kerberos简单配置攻略 - ArcGIS知乎 - 新一代ArcGIS问答社区 - Esri中国

Kerberos常用命令总结

Kerberos 简单配置攻略

安装与配置kerberos

https://blog.csdn.net/qq_36191174/article/details/82466743

https://blog.csdn.net/Post_Yuan/article/details/54406148

上一篇下一篇

猜你喜欢

热点阅读