我有一些关于使用keytab进行身份验证的问题,希望这里的人能给我一些启发。
比如说,我有一个userA,它将使用运行在端口1010上的服务。首先,userA将登录到Active Directory进行身份验证。

登录后,userA将尝试连接到服务器以使用其服务1010。为了让服务器验证UserA是谁,我需要使用setspn在Active Directory注册SPN。例如
setspn -s service1010/mydomain.com serviceaccount1然后需要在活动目录下生成ktab文件,例如
ktab -a serviceprincal1010/server.domain.com@DOMAIN.COM -k mykeytab.keytab然后将mykeytab.keytab带到服务器上。
在服务器端,我将使用JAAS和登录配置来查询KDC。
ServicePrincipalLoginContext
{
com.sun.security.auth.module.Krb5LoginModule required
principal=serviceprincal1010/server.domain.com@DOMAIN.COM
doNotPrompt=true useKeyTab=true keyTab=mykeytab.keytab storeKey=true;
};从现在开始,我很困惑。userA是如何得到验证的(即,userA实际上就是他?)
发布于 2014-08-12 21:11:27
你的图表错了。您对kerberos的工作方式有一个基本的误解。(顺便说一句,这很常见)。使用kerberos进行身份验证的服务从不与kdc对话。它所做的就是使用它的秘密密钥( keytab )来解密用户呈现的blobs。
kerberos中唯一与KDC对话的部分是客户端或用户端。当它试图在端口1010访问服务时,它首先向KDC请求该服务的服务票证。这是一个blob加密的服务的秘密密钥,其中有用户的身份。(加上其他一些与协议相关的东西)。
如果您在端口1010的服务中有一个基于GSS的api,那么只需告诉这个API keytab在哪里,然后询问它在连接上的用户it是什么。您不需要与外部服务建立任何其他连接。我不熟悉Java,但是应该只需要一两次调用来验证用户凭据。
虽然此对话与目前使用的Kerberos版本不完全匹配,但它将帮助您理解基本原则。
http://web.mit.edu/kerberos/dialogue.html
发布于 2014-08-07 13:02:26
要理解这一点,您必须了解Kerberos的基本原则,Kerberos是一个“受信任的第三方”安全系统。
您的服务器将收到一个“令牌”,票证授予服务(TGS;基本上是Windows域控制器)使用服务器的密钥加密,该密钥存在于keytab文件中。当然,服务器需要访问该秘密密钥才能解密。如果解密成功,这将向服务器保证令牌是可信的,因为只有TGS和服务器才知道密钥--这是双方共享的秘密。
短语“受信任的第三方”指的是TGS,因为服务器(第一方)允许用户(第二方)通过身份验证,因为它间接地信任TGS (第3方)。
https://stackoverflow.com/questions/25183113
复制相似问题