Kerberos是MIT开发的一种双端认证机制, 原意是守护地狱的三头犬.
什么叫双端认证呢? 就是不光是服务器要认证用户, 用户也要认证服务器.
Kerberos是通过ticket来进行认证的. ticket相当于门票的意思. ticket是有有效期的, 有效期内都可以使用, 不用每次都申请新的.
Kerberos认证系统中, 有一个或多个用来生成和检验ticket的认证服务器, 叫KDC. 所有需要认证的服务都有一个principal, 比如我在系统中配了一台ldap服务器, 这个服务器通过Kerberos来进行验证, 那么这个服务器在KDC就有一个注册的principal. KDC在注册principal的时候会生成一个或多个用来加密的key, 加密方式有很多种, 比如DES.
举个例子吧. 马尔代夫卡尼岛自从提供一价全包服务之后生意火爆, 导致出现了一些不好的现象, 一些没交钱的用户偷渡到岛上混吃混喝, 还有一些黑心的员工提供劣质服务欺骗用户. 为了打击这些现象, 卡尼岛决定引入一种叫做"三头看门狗"式服务规范.
当你预定了一个一价全包的马尔代夫卡尼岛7日游, 你交完钱之后, 就可以去"卡尼岛票据中心"领取一张"全包票", 拿这张票, 岛上服务全部免费! 于是你就拿了一张"全包票"开始了你的卡尼岛之行. 你听说岛上有一个"ldap服务中心", 可以提供一种叫ldap的"马杀鸡"服务相当的爽, 于是你跑去想试试. 你去请求服务的时候, "ldap服务中心"会问你要一张"ldap票". 可是你手里只有一张"全包票", 怎么办呢? 于是你拿着你的"全包票"跑去找"卡尼岛票据中心", "卡尼岛票据中心"检查完你的"全包票"之后, 查看他的"服务注册清单", 发现"ldap马杀鸡服务"在上面, 就会发给你"ldap票", 拿着它你就可以享受"马杀鸡"服务, 并且, 下次去的时候, 拿着你上次申请的"ldap票"就可以了.
这里卡尼岛是一个"realm", 是Kerberos服务认证的通行范围. "卡尼岛票据中心"是这个realm中的KDC, 负责分发和检查ticket. ldap服务在KDC注册了一个"ldap"的principal. 你通过用户和密码可以从KDC拿到初始ticket. 当你需要访问ldap服务的时候, 拿初始ticket去KDC换一张ldap ticket. KDC检查你要访问的principal, 给你一张加密过的ldap ticket, 密钥只有KDC和ldap服务器知道. 你拿着这张ticket去访问ldap服务的时候, ldap会用它的密钥来解密, 解出来是对的就可以提供你ldap服务了.