Kerberos 验证

我将在这里阐述关于Kerberos验证的过程。在此之前,我们先记住如下两个规则。我将在下文进行解释。 ·         如果A与B两者拥有只有他们之间想要分享的信息,他们就会对该通信通过Session Key的方式进行加密。通常写为A / B Session Key。 ·         如果A的某些信息需要交到B手中,又不愿意B了解信息的内容,A会使用只有自己知道的Secret Key进行加密   在本文中,将使用到的术语如下: ·         AS – Authentication Server ·         TGS – Ticket Granting Server ·         TGT – Ticket Granting Ticket 在本文中AS和TGS扮演同样的角色。   Kerberos验证的过程可以分为4步:客户端登陆;客户端验证;客户端-服务端验证;客户端-服务端请求;   客户端登陆 1. 客户端接收用户名与密码的输入。 2. 客户端计算密码的Hash值,并保存为客户端的Secret Key     客户端验证 1. 客户端以明文的方式,向验证服务器(Authentication Server / Ticket Granting Server)发送用户名。在微软的Kerberos实现中,验证服务器由KDC来实现。 2. 验证服务器在接收到客户端明文发过来的用户名后,从AD服务器中查询该用户名所对应的用户信息,并取得密码。注意,客户端并没有把密码也发给验证服务器。 3. 验证服务器通过同样的Hash算法,计算上步得到用户在AD服务器中的密码所对应的Hash值,作为Secret Key。我们可以看到,客户端和验证服务器分别通过相同的方法生成Secret…

0

Kerberos和NTLM - SQL Server连接的那点事

当我们使用Windows Authentication去连接SQL Server的时候,SQL Server可能会使用Kerberos或者是NTLM来进行认证,有时间就会因为认证失败的缘故造成各种登录错误(login failed)。解决这些问题往往令人很迷惑。今天我们就来做一个简单的介绍。  1. Kerberos VS NTLM NTLM认证:Challenge – Response 模式 在使用NTLM协议时,客户端发送用户名到服务器端;服务器生成一个challenge并发送给客户端;客户端使用用户的密码来加密这个challenge,然后发送response到服务器端。如果该账号是一个本机账号,那么服务器使用Security Account Manager来验证用户;如果账号是一个域账号,那么服务器把这个response请求转送到域控制器(DC)上来让域控制器调用组安全策略来做用户认证,然后服务器就可以构建一个安全令牌并建立一个session。 Kerberos认证:Trust-Third_party架构 Kerberos认证提供一种服务器和客户端相互认证的机制。Kerberos包含了三个关键组件:Key Distribution Center (KDC),客户端用户,和一个运行所需服务的服务器。KDC是域控制器的一部分,它执行两个任务:认证服务(AS)和票据许可服务(TGS)。当客户端用户登录到网络上时,它会向用户所在域的AS去请求一个“票据请求票据”(TGT)。然后,当客户端想要访问网络上的某个资源的话,它就出示以下东西:TGT,认证码,Server Principal Name(SPN);有了这些东西,客户端就可以从服务所在的域中的TGS获得session票据。使用这个session票据,客户端就可以和网络上的服务进行交流,该服务会验证“认证码”然后创建一个访问令牌给客户端用户,接下来客户端就可以登录上该服务了。  2. Kerberos和NTLM认证的要求 Kerberos的要求: 1) 客户端和服务器端一定要加入域,如果客户端和服务器端在不同的域的话,这两个域一定要被配置被互相信任。 2) 注册SPN。SPN是服务器上所运行服务的唯一标示。每个使用Kerberos的服务都需要一个SPN,这样客户沪端才可以辨认这个服务。SPN是注册在AD上的机器账户或者是域用户账户下的。比如,如果SQL Server运行在Local System或Network Service账户下,那么SPN就需要注册在机器账户下。如果SQL Server运行在域用户下,则SPN就需要注册在该域用户下。 这个顺便提一下。当一个服务运行在Local System或Network Service下的时候,我们称该服务运行在机器帐户下。因为,从AD的角度来看,每台机器的Local System或Network Service都代表了这条机器本身,而机器本身也是一种用户,叫做机器帐户。 SPN 一个SQL Server的SPN由以下元素组成: ·       服务类型:它标示了服务的泛用类。对于SQL Server而言,它永远是MSSQLSvc。 ·       主机:它有两种形式。一个是运行SQL Server的计算机的fully qualified domain name (FQDN)。还有一种就是SQL Server的计算机的netbios名字,俗称短名。 ·       端口号/实例名:服务所监听的计算机端口号。对于SQL Server而言,如果SQL运行在默认端口(1433)上,则端口号可以省略。 从SQL Server…

2