来自:MSN群-邮件技术咨询网 殷杰

信任就是一个通道,实际上,信任在AD中建立了一个表,我们称为TDO(信任域对象)
一个A域的应用,是加入A域的服务器,现在有一个B域的用户来访问它了。那么我们假定用户信息为:B\USERB,能看懂吧,这表示B域的用户USERB,好,USERB把它的身份信息提交给A域的服务器SERVERA, 但是我们根据域的安全边界和票据验证原理,打断一下,大家都知道票据验证的原理吧, 也就是我们常说的kerberos.
简单延伸一下吧,kerberos是地狱中的看门狗,它有三个头。这和验证有什么关系呢?
我们先举个例子
假设今天我在网上买了个笔记本,现在卖家让我付款,那么在座的你们敢把钱付给卖家吗?
不敢!
为什么呢?我给他了,他不给我,我就被骗了.
是的,于是我让卖家先发货,卖家敢吗
不敢
不敢,他发货我不给钱
这个问题的根源在于我和卖家使不互信的,那么这个交易怎么做? 寻找一个值得信任的机构
那么回到我们的AD来,当用户A要访问服务B时,由于服务B不信任A提供的信息,因此它不能直接和用户A交易,同理的,用户A也不相信服务器B说的,因此呢,他们也需要找一个中介方,这个中介方就是KDC,也就是DC上的一个服务,我们称为密钥分发中心.
用户A将自己的信息提交给KDC,KDC会验证A的信息,并且将验证后的信息用B的密钥进行加密。并将加密后的信息还给A,现在我们看到用户A拿到了一个凭据,但是它是打不开的,用户A于是直接将这个凭据连同自己的声明信息交给服务器B,服务器B获得这些后,首先用自己的密钥解开KDC封装的凭据,并将其中的信息和A提供的资料进行比对,以确认A的身份,同理,A也会对B提交的凭据进行同样的检验,检验完毕后,A和B才会进行通讯,这就是Kerberos的根本原理。我们称为票据–ticket, 所以,从原理来讲,你的用户名和密码是不会再网络上传播的,你访问资源用的就是这样一张一张的票据,票据上有有效的时限,过期后就要重新去KDC申请, 一般情况下,票据的有效时间为10个小时.
总结一下
我们看到在同一个域中,KDC和安全主体以及资源分布保存着自己的密钥信息, 包括用户A自己的密钥,计算机B的密钥,以及保存在KDC中的两者的副本, 请注意,只有KDC中保存有所有域中对象的密钥信息, 但是,请注意,KDC中只保存本域的对象密钥副本.
B域的用户USERB也是这样来提交信息给A域的服务器SERVERA的, 但是,SERVERA不信任它的。于是SERVERA会去KDC中查询, 但是我们知道KDC只有本域的信息阿,所以显然它找不到USERB的信息的, 如果没有信任,KDC就会返回无效用户,验证失败, 这个没有问题吧
但是现在有信任,有什么变化呢
前面我说过信任会在AD中建立一个TDO的对象,其内容就是信任的域名, 所以,KDC在检查时发现这个用户的域信息和TDO匹配,于是,它就知道了这个用户是来自信任域的, 那么我们是否注意到,在建立信任关系的时候有一个信任密码的设置, 这个信任密码就是TDO对象的密钥,因此根据前面的原理,在KDC中也有这个TDO对象密钥的副本的。 于是KDC就将USERB的信息用TDO对象的密钥加密成票据了, 但是这时USERB还是无法访问SERVERA的, 但是SERVERA现在可以访问B域的KDC了, 于是SERVERA会重复以上过程,重新从B域的KDC中获得USERB的信息票据, 如此一来,USERB和SERVERA的身份就可以验证了。 信任就是一个通道,允许一个域的主体去访问另一个域的KDC服务,以获得所需要的票据
这只是一个单向信任的简单例子, 如果信任是双向的,或传递的, 则情况会更加复杂,用户可能要经过多次这样的中介,最终才能拿到它所要的访问票据, 但原理是一样的!