Kerberos认证原理

16 阅读3分钟
  • kerberos是一种网络身份验证协议

一些概念

  • 客户端

    • CT_SK加密信息:客户端在访问TGS时发送的
      • 客户端名称
      • 客户端IP
      • 时间戳:TGS根据时间戳判断是否超时,默认5min
    • CS_SK加密信息:客户端在访问服务端时携带
      • 客户端名称
      • 客户端IP
      • 时间戳
      • ST有效时间
  • KDC:密钥分发中心

    • AS:认证服务器
      • TGS公钥加密信息
        • 客户端名称
        • 客户端IP
        • TGS名称
        • TGT有效时间
        • CT_SK
      • 客户端加密信息
        • CT_SK(session key):用来对客户端向TGS发送的信息加密
        • TGS名称
        • TGT有效时间
        • 时间戳
    • TGS:票证授予服务器
      • Server公钥加密信息
        • 客户端名称
        • 客户端IP
        • 服务端IP
        • ST有效时间
        • 时间戳
        • CS_SK
      • CT_SK加密信息
        • CS_SK
        • 时间戳
        • ST有效时间
  • Realm:领域,身份验证管理域,领域确定了管理边界,所有主题均属于特定的kerberos域

  • principal:主体,principal主体用于标识身份,每个参与Kerberos认证协议的用户和服务都需要一个主体来唯一标识自己。Principal由三部分组成:名字,实例,域,例如一个标准的Kerberos用户/服务表示为:name/instance@REALM.

    • name :表示用户名
    • instance:对name的进一步描述,例如name所在的主机名或name的类型,可以省略,与第一部分用/分割
    • realm:表示Kerberos在管理上的划分,在KDC中所负责的一个域数据库称作realm,这个数据库中存放有该网络范围内所有Principal和他们的密钥
    • eg:
      • 用户principal:zhangsan/admin@example.com,形式是 用户名/角色/realm域
      • 服务principal:ftp/site.example.com@example.com,形式是 服务名/地址/realm域
  • keytab: Kerberos认证有两种方式:密钥文件和密码,keytab就是密钥文件,该文件包括principal主体的用户名及密码,客户端可以通过keytab密钥文件进行身份验证

  • kadmin:运行在主kerberos节点,负责存储KDC数据库,管理principal信息

  • 认证流程:

L1VzZXJzL2VzdGltL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9EaW5nVGFsa01hYy8xMjcyMjMzMjU3X3YyL0ltYWdlRmlsZXMvMTcxNDExMTI4OTMwNl8zM0UwRDJFQi1CNUJELTRCNUUtODM5OC1GNUEwRDk0N0I0MkEucG5n.png

  • 客户端访问AS,AS验证过后发票(一个TGS公钥加密信息A,一个客户端公钥加密信息B)

L1VzZXJzL2VzdGltL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9EaW5nVGFsa01hYy8xMjcyMjMzMjU3X3YyL0ltYWdlRmlsZXMvMTcxNDExMTI0ODk5M19GQ0Q3OTMxQS1CRkFCLTQ5MEYtQkRENi04RUFCQzcwNjQzMDkucG5n.png

  • 客户端拿到此票可以访问TGS,将TGT加密信息原封不动+服务端名称+CT_SK加密信息发送给TGS,TGS发票(Server公钥加密信息+CT_SK加密)

L1VzZXJzL2VzdGltL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9EaW5nVGFsa01hYy8xMjcyMjMzMjU3X3YyL0ltYWdlRmlsZXMvMTcxNDExMTI3OTcwOV81RjYwMjREMy1DM0UwLTQxMTItQUI3QS03RkVBQkI0OTRGOTMucG5n.png

  • 客户端拿着TGS发的Server公钥加密信息+CS_SK信息,再去访问服务端

L1VzZXJzL2VzdGltL0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9EaW5nVGFsa01hYy8xMjcyMjMzMjU3X3YyL0ltYWdlRmlsZXMvMTcxNDExMTMxOTY3NF83MkM2NDIxRi01MzI3LTQyQjItOEMwQi04MDY5NkNDNTRBQTAucG5n.png

  • Kerberos优势
    • 密码无需进行网络传输,基于ticket实现身份认证,保证密钥安全性
    • 双向认证,整个认证过程中,不仅需要客户端进行认证,待访问的服务也需要进行身份认证
    • 高性能。密钥采用对称加密方式,相比SSL的密钥操作快几个数量级,一旦Client获得访问某个Server的ticket,该Server就能根据这个Ticket实现对client的验证,无须KDC的再次参与