FreeBSD 上使用Kerberos 5认证

第一部分 Kerberos 协议介绍 1.Kerberos 协议简介在希腊神话中,Kerberos是守护地狱之门的三头狗 。在计算机世界里,美国麻省理工学院(MIT)把他们开发的这一网络认证系统命名为Kerberos 。Kerberos认证协议是由美国麻省理工学院(MIT)在80年代首先提出并实现的,是该校Athena计划的一部分 。因为Kerberos是一个三方认证协议,根据称为密匙分配中心(KDC)的第三方服务中心来验证网络中计算机相互的身份,并建立密匙以保证计算机间安全连接 。Kerberos协议基本上是可行的并且有效的 。KDC有两个部分组成:认证服务器AS和票据授权服务器TGS 。Kerberos是一种网络认证协议,允许一台计算机通过交换加密消息在整个非安全网络上与另一台计算机互相证明身份 。一旦身份得到验证,Kerberos协议将会给这两台计算机提供密匙,以进行安全通讯对话 。Kerberos协议可以认证试图等录上网用户的身份,并通过使用密匙密码为用户间的通信加密 。总的来说,Kerberos 是一种基于私钥加密算法的,需要可信任的第三方作为认证服务器的网络认证系统 。它允许在网络上通讯的实体互相证明彼此的身份,并且能够阻止旁听和重放等手段的攻击 。不仅如此,它还能够提供对通讯数据保密性和完整性的保护 。
Kerberos从提出到今天,共经历了五个版本的发展 。其中版本1到版本3主要由该校内部使用 。当它发展到版本4的时候,已经取得了在MIT校园外的广泛认同和应用 。由于版本4的传播,人们逐渐发现了它的一些局限性和缺点(例如适用网络环境有限, 加密过程存在冗余等等).MIT充分吸收了这些意见,对版本4进行了修改和扩充,形成了今天非常完善的版本5 。现在可以MIT提供的Kerberos V5的最新实现是版本krb5 1.3.3,本文中提到的实现都是以它为依据的 。
2.Kerberos协议术语解释
Principal:在Kerberos中,Principal是参加认证的基本实体 。一般来说有两种,一种用来表示Kerberos数据库中的用户,另一种用来代表某一特定主机,也就是说Principal是用来表示客户端和服务端身份的实体, Principal的格式采用ASN.1标准,即Abstract Syntax Notation One,来准确定义),Principal是由三个部分组成:名字(name),实例(instance),REALM(域) 。比如一个标准的Kerberos的用户是:name/instance@REALM。
Name:第一部分 。在代表客户方的情况,它是一个用户名;在代表主机的情况,它是写成host 。
Instance:第二部分 。对name的进一步描述,例如name所在的主机名或name的类型等,可省略 。它与第一部分之间用‘ / "分隔,但是作为主机的描述时写成host/Instance 。
Realm:第三部分 。是Kerberos在管理上的划分,在 KDC中所负责的一个域数据库称作为Realm 。这个数据库中存放有该网络范围内的所有Principal和它们的密钥,数据库的内容被Kerberos的认证服务器AS和票据授权服务器TGS所使用 。Realm通常是永远是大写的字符,并且在大多数Kerberos系统的配置中,一般Realm和该网络环境的DNS域是一致的 。与第二部分之间用‘@"分隔,缺省为本地的Realm 。
比如,Principal “ cnhawk/hawk.the9.com@THE9.COM ” 表示Realm “ THE9.COM ”中主机hawk.the9.com上的用户cnhawk ,而Principal “ host/hawk.the9.com @THE9.COM ” 则通常用来表示Realm “ THE9.COM”中主机hawk.the9.com 。
Credential: Ticket和与它相联系的会话密钥合在一起称为Credential 。之所以有这个概念是因为它们是客户端在向服务器证明自己的身份时必需的两样东西.在一个Ticket的生存期内客户端会将这两样东西以Credential为单位保存在一个Cache文件中 。
Ticket: 一个Ticket是一个用于安全的传递用户身份所需要的信息的集合 。它不仅包含该用户的身份,而且包含其它一些相关的信息 。一般来说,它主要包括客户方Principal,目的服务方Principal,客户方IP地址,时间戳(分发该Ticket的时间),该Ticket的生存期,以及会话密钥等内容 。它的格式亦用ASN.1来准确定义 。

推荐阅读