首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keytab到底是如何工作的?

keytab到底是如何工作的?
EN

Stack Overflow用户
提问于 2014-08-07 12:55:27
回答 2查看 10.6K关注 0票数 7

我有一些关于使用keytab进行身份验证的问题,希望这里的人能给我一些启发。

比如说,我有一个userA,它将使用运行在端口1010上的服务。首先,userA将登录到Active Directory进行身份验证。

登录后,userA将尝试连接到服务器以使用其服务1010。为了让服务器验证UserA是谁,我需要使用setspn在Active Directory注册SPN。例如

代码语言:javascript
复制
setspn -s service1010/mydomain.com serviceaccount1

然后需要在活动目录下生成ktab文件,例如

代码语言:javascript
复制
ktab -a serviceprincal1010/server.domain.com@DOMAIN.COM -k mykeytab.keytab

然后将mykeytab.keytab带到服务器上。

在服务器端,我将使用JAAS和登录配置来查询KDC。

代码语言:javascript
复制
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实际上就是他?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 15
EN

Stack Overflow用户

发布于 2014-08-07 13:02:26

要理解这一点,您必须了解Kerberos的基本原则,Kerberos是一个“受信任的第三方”安全系统。

您的服务器将收到一个“令牌”,票证授予服务(TGS;基本上是Windows域控制器)使用服务器的密钥加密,该密钥存在于keytab文件中。当然,服务器需要访问该秘密密钥才能解密。如果解密成功,这将向服务器保证令牌是可信的,因为只有TGS和服务器才知道密钥--这是双方共享的秘密。

短语“受信任的第三方”指的是TGS,因为服务器(第一方)允许用户(第二方)通过身份验证,因为它间接地信任TGS (第3方)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25183113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档