转自:http://www.cnblogs.com/artech/archive/2011/01/24/kerberos.html
最近一段时间都在折腾安全(Security)方面的东西,比如Windows认证、非对称加密、数字证书、数字签名、TLS/SSL、WS-Security等。如果时间允许,我很乐意写一系列的文章与广大网友分享、交流。对于很多读者来说,今天讨论的可能是一个既熟悉、又陌生的话题——Windows认证。
一、Kerberos认证简介
Windows认证协议有两种NTLM(NT LAN Manager)和Kerberos,前者主要应用于用于Windows NT 和 Windows 2000 Server(or Later) 工作组环境,而后者则主要应用于Windows 2000 Server(or Later) 域(Domain)环境。Kerberos较之NTLM更高效、更安全,同时认证过程也相对复杂。Kerberos这个名字来源于希腊神话,是冥界守护神兽的名字。Kerberos是一个三头怪兽,之所以用它来命名一种完全认证协议,是因为整个认证过程涉及到三方:客户端、服务端和KDC(Key Distribution Center)。在Windows域环境中,KDC的角色由DC(Domain Controller)来担当。
某个用户采用某个域帐号登录到某台主机,并远程访问处于相同域中另一台主机时,如何对访问者和被访问者进行身份验证(这是一种双向的验证)?这就是Kerberos需要解决的场景。接下来我尽量以比较直白的语言来介绍我所知道的Kerberos认证的整个流程。
Kerberos实际上是一种基于票据(Ticket)的认证方式。客户端要访问服务器的资源,需要首先购买服务端认可的票据。也就是说,客户端在访问服务器之前需要预先买好票,等待服务验票之后才能入场。在这之前,客户端需要先买票,但是这张票不能直接购买,需要一张认购权证。客户端在买票之前需要预先获得一张认购权证。这张认购权证和进入服务器的入场券均有KDC发售。右图(点击看大图)一张图基本揭示了Kerberos整个认证的过程。
二、如何获得“认购权证”?
首先,我们来看看客户端如何获得“认购权证”。这里的认购权证有个专有的名称——TGT(Ticket Granting Ticket),而TGT的是KDC一个重要的服务——认证服务(KAS:Kerberos Authentication Service)。当某个用户通过输入域帐号和密码试图登录某台主机的时候,本机的Kerberos服务会向KDC的认证服务发送一个认证请求。该请求主要包括两部分内容,明文形式的用户名和经过加密的用于证明访问者身份的Authenticator(我实在找不到一个比较贴切的中文翻译没,Authenticator在这里可以理解为仅限于验证双反预先知晓的内容,相当于联络暗号)。
当KDC接收到请求之后,通过AD获取该用户的信息。通过获取的密码信息生成一个秘钥对Authenticator进行解密。如果解密后的内容和已知的内容一致,则证明请求着提供的密码正确,即确定了登录者的真实身份。
KAS成功认证对方的身份之后,会先生成一个用于确保该用户和KDC之间通信安全的会话秘钥——Logon Session Key,并采用该用户密码派生的秘钥进行加密。KAS接着为该用户创建“认购权证”——TGT。TGT主要包含两方面的内容:用户相关信息和Logon Session Key,而整个TGT则通过KDC自己的密钥进行加密。最终,被不同密钥加密的Logon Session Key和TGT返回给客户端。(以上的内容对应流程图中的步骤1、2)
三、如何通过“认购权证”购买“入场券”?
经过上面的步骤,客户端获取了购买进入同域中其他主机入场券的“认购凭证”——TGT,以及Logon Session Key,它会在本地缓存此TGT和Logon Session Key。如果现在它需要访问某台服务器的资源,它就需要凭借这张TGT向KDC购买相应的入场券。这里的入场券也有一个专有的名称——服务票据(ST:Service Ticket)。
具体来说,ST是通过KDC的另一个服务TGS(Ticket Granting Service)出售的。客户端先向TGS发送一个ST购买请求,该请求主要包含如下的内容:客户端用户名;通过Logon Session Key加密的Authenticator;TGT和访问的服务器(其实是服务)名。
TGS接收到请求之后,现通过自己的密钥解密TGT并获取Logon Session Key,然后通过Logon Session Key解密Authenticator,进而验证了对方的真实身份。
TGS存在的一个根本的目有两点:其一是避免让用户的密码客户端和KDC之间频繁传输而被窃取。其二是因为密码属于Long Term Key(我们一般不会频繁的更新自己的密码),让它作为加密密钥的安全系数肯定小于一个频繁变换得密钥(Short Term Key)。而这个Short Term Key就是Logon Session Key,它确保了客户端和KDC之间的通信安全。
TGS完成对客户端的认证之后,会生成一个用于确保客户端-服务器之间通信安全的会话秘钥——Service Session Key,该会话秘钥通过Logon Session Key进行加密。然后出售给客户端需要的入场券——ST。ST主要包含两方面的内容:客户端用户信息和Service Session Key,整个ST通过服务器密码派生的秘钥进行加密。最终两个被加密的Service Session Key和ST回复给客户端。(以上的内容对应流程图中的步骤3、4)
四、凭票入场
客户端接收到TGS回复后,通过缓存的Logon Session Key解密获取Service Session Key。同时它也得到了进入服务器的入场券——ST。那么它在进行服务访问的时候就可以借助这张ST凭票入场了。该Serivce Session Key和ST会被客户端缓存。
但是,服务端在接收到ST之后,如何确保它是通过TGS购买,而不是自己伪造的呢?这很好办,不要忘了ST是通过自己密码派生的秘钥进行加密的。具体的操作过程是这样的,除了ST之外,服务请求还附加一份通过Service Session Key加密的Authenticator。服务器在接收到请求之后,先通过自己密码派生的秘钥解密ST,并从中提取Service Session Key。然后通过提取出来的Service Session Key解密Authenticator,进而验证了客户端的真实身份。
实际上,到目前为止,服务端已经完成了对客户端的验证,但是,整个认证过程还没有结束。谈到认证,很多人都认为只是服务器对客户端的认证,实际上在大部分场合,我们需要的是双向验证(Mutual Authentication)——访问者和被访问者互相验证对方的身份。现在服务器已经可以确保客户端是它所声称的那么用户,客户端还没有确认它所访问的不是一个钓鱼服务呢。
为了解决客户端对服务器的验证,服务要需要将解密后的Authenticator再次用Service Session Key进行加密,并发挥给客户端。客户端再用缓存的Service Session Key进行解密,如果和之前的内容完全一样,则可以证明自己正在访问的服务器和自己拥有相同的Service Session Key,而这个会话秘钥不为外人知晓(以上的内容对应流程图中的步骤5、6)
以上的内容仅仅讲述的是基于Kerberos的Windows认证的大体流程,并不涉及到一些细节的东西,比如如何确保时间的同步,如何抵御Replay Attack等。此外,由于本文对Windows底层的知识有限,不能确保所有的内容都是完全正确,如有错误,还往不吝指正。
相关推荐
6. **Kerberos的应用**:Kerberos被广泛应用在企业网络、云服务、操作系统(如Windows、Linux)等环境中,作为认证基础设施,保障用户和服务之间的安全交互。 7. **Kerberos与其他认证协议的对比**:如LDAP、RADIUS...
该协议基于对称密钥加密技术,通过第三方认证服务器(即Kerberos票证授予服务器,TGS)进行身份验证,确保用户和服务器之间的交互安全。 二、Kerberos工作原理 1. 预共享密钥(PSK):每个实体在Kerberos环境中都...
Tableau 连接 Kerberos 认证的 Impala Tableau 是一个数据可视化工具,Impala 是一个基于 Hadoop 的高性能查询...通过这篇文章,读者可以了解如何使用 Tableau 连接 Kerberos 认证的 Impala,提高数据安全性和可靠性。
3. **配置Kerberos**:安装Kerberos服务,并配置`/etc/krb5.conf`文件,确保Linux系统能够与Windows域控制器进行Kerberos通信。 4. **用户同步**:使用Samba工具同步域内用户至Linux系统。 5. **测试资源共享**:...
1. Windows安全原理篇: - 安全架构:Windows NT的安全体系包括审计(Audit)、管理(Administration)、加密(Encryption)、访问控制(Access Control)、用户认证(User Authentication)和公共安全策略(Corporate ...
7. **设置用户映射**:为了使Windows AD用户能够访问Samba共享,需要在Samba配置文件中设置用户映射规则,如`map to guest = Bad User`,以处理认证失败的情况。 8. **权限和策略**:根据需求,你可以配置Samba共享...
在本篇高级网络应用中,主要探讨了如何利用Linux操作系统作为Windows域的文件服务器,以提高文件服务的安全性。Linux以其稳定性和安全性被选为替代Windows服务器的解决方案,特别是通过Samba软件,可以实现与Windows...
- **用途**:提供Windows安全和注册表操作API,是Windows核心安全功能的基础。 #### avicap32.dll - ڽͷƵΪAVIʽ.¼ƵƵ,ô㽫ֹ - **用途**:支持AVI文件的捕获和播放功能。 #### ADVPACK.DLL - AdvpackLibrary...
本篇将深入探讨一个名为mimikatz的工具及其开发者Benjamin DELPY的工作,以及这些工具在安全测试、安全防御和安全实践中的应用。 mimikatz是由法国安全研究员Benjamin DELPY开发的一款小巧但功能强大的程序,它最初...
本篇文章将深入探讨“带安全验证的Wcf服务”,以及如何实现这个功能。 首先,我们需要理解WCF服务的基本概念。WCF是一种面向服务的架构(SOA),它允许开发者创建可以在多个应用程序之间交换数据的服务。这些服务...
2. **身份验证机制**:随着版本的更新,Windows Vista 对身份验证机制进行了改进,提供了更多安全选项,比如Kerberos V5、NTLMv2等高级身份验证协议的支持。 3. **网络连接管理**:Windows Vista引入了新的网络连接...
其中 `NOSASL` 表示不使用 SASL 认证,适合没有特殊安全需求的情况。 可以通过以下方式设置认证机制: ```python from pyhs2 import connect conn = connect(host='your_host', port=10000, authMechanism='NOSASL...
Active Directory使用DNS服务进行域名解析,LDAP(轻量级目录访问协议)用于存储和检索对象信息,而Kerberos则是一种强大的认证协议,为用户提供安全的网络身份验证。Kerberos的工作流程包括Ticket Granting Ticket...
在生产环境中,为了提高Hadoop集群的安全性和可用性,可能需要配置Kerberos认证、HA(High Availability)NameNode和ResourceManager等。 12. **遇到的问题与解决方法** 在Windows上运行Hadoop可能会遇到一些问题...
Windows Communication Foundation(WCF)是微软提供的一种用于构建分布式应用程序的服务框架,它允许服务和客户端之间进行安全、可靠、可管理的通信。在WCF中,身份验证是确保只有授权的实体可以访问服务的重要机制...
通过`security`配置项可以设置认证类型,如`user`(基于本地用户)、`domain`(与Windows域同步)或`server`(通过主服务器认证)。 四、Samba使用经验 1. **问题:** 文件权限问题。解决:确保Linux系统中的用户和...
文档内容包括了关于软件的使用、平台支持、系统要求、所需权限、使用端口、命名约定、安全性考虑、Kerberos 认证、许可证管理等多个方面的信息。 二、平台支持 文档强调 Veeam Backup & Replication 支持各种 ...
对于SSL和SSPI的集成,这意味着curl在处理HTTPS请求时,能够利用Windows的内置安全机制,如NTLM或Kerberos进行身份验证。SSPI是Windows下的一种安全抽象层,它允许不同的安全协议(如SSL/TLS)共存,并简化了客户端...