gpt4 book ai didi

kerberos - gss_acquire_cred 失败,未找到 key 表条目

转载 作者:行者123 更新时间:2023-12-02 18:56:35 37 4
gpt4 key购买 nike

我正在尝试在加入域的场景中使 Windows 客户端与 Linux 服务器进行身份验证,我已经根据 PBIS/gssapps 提供的文档创建了一个服务主体和 MSDN GSS/SSPI interop documentation 。更新了/etc/krb5.keytab 中的相关 key 表条目。

确保 DNS 区域设置正确并且计算机已加入域

static int server_acquire_creds(
char *service_name,
gss_cred_id_t *server_creds
)
{
int ret = 0;
gss_buffer_desc name_buf = GSS_C_EMPTY_BUFFER;
gss_name_t server_name = GSS_C_NO_NAME;
OM_uint32 maj_stat = 0, min_stat = 0;

name_buf.value = service_name;
name_buf.length = strlen((char *)name_buf.value) + 1;
maj_stat = gss_import_name(&min_stat, &name_buf,
(gss_OID) gss_nt_service_name, &server_name);
if (maj_stat != GSS_S_COMPLETE) {
display_status("importing name", maj_stat, min_stat);
ret = -1;
goto error;
}


maj_stat = gss_acquire_cred(&min_stat, server_name, 0,
GSS_C_NULL_OID_SET, GSS_C_ACCEPT,
server_creds, NULL, NULL);
if (maj_stat != GSS_S_COMPLETE) {
display_status("acquiring credentials", maj_stat, min_stat);
ret = -1;
goto error;
}

error:
(void) gss_release_name(&min_stat, &server_name);

return ret;
}

我遇到的错误:

GSS-API error acquiring credentials: Unspecified GSS failure.  Minor code may provide more information (851968, 851968, 0x000d0000)

GSS-API error acquiring credentials: No key table entry found matching gss\/dell-vostro-155.domain.in/domain.in@ (39756033, 39756033, 0x025ea101)

传递的service_name“gss/dell-vostro-155.domain.in@domain.in”

我确实在 ktutil/list 中看到了主体

主要是寻找有关如何调试此问题的建议。

编辑:

ktutil:列表-e

...

114 2 gss/dell-vostro-155.domain.in@domain.in (des-cbc-crc)

~/work/gss$ hostname -A
dell-vostro-155.domain.in

这发生在服务器端,它将执行 gss_ASC,

sudo ./gss-server gss/dell-vostro-155.domain.in@domain.in

因此 gss-server 充当主体名称中的“gss”部分。

编辑

krb5.conf 有点大,我想粘贴一些东西,因为它添加了一个 Pastebin 链接 krb5.conf

最佳答案

我实际上向 kerberos@mit.edu 发送了一封邮件来帮助我,这是他们推荐的。

此代码导入 krb5 主体名称,但带有name 类型,指示基于 GSS 主机的服务名称。 (gss_nt_服务名称拼写更正确 GSS_C_NT_HOSTBASED_SERVICE;我不知道为什么 Microsoft 文档使用过时的标识符。)

我们可以执行以下操作之一:

  1. 不要导入名称或获取信用。将 GSS_C_NO_CREDENTIAL 传递给gss_accept_sec_context() 作为验证者信用句柄。客户将能够对 key 表中的任何 key 进行身份验证,因此请确保keytab 不包含无关的条目。这就是方法大多数 Kerberos 开发人员推荐。

  2. 使用 GSS_KRB5_NT_PRINCIPAL_NAME 名称类型而不是gss_nt_service_name,以便将导入的名称视为 krb5主体名称。

  3. 使用基于 GSS 主机的服务名称而不是主体名称。这基于主机的服务名称可能类似于“gss@dell-vostro-155.domain.com”对于这个键(尽管“gss”并不是真正合适的第一个组件,因为它没有命名服务协议(protocol))。使用 MIT krb5 1.10+,您还可以只需指定第一个组件(在本例中为“gss”),允许客户端对与第一个组件匹配的任何 key 表条目进行身份验证。

欲了解更多信息,请参阅 http://web.mit.edu/kerberos/krb5-latest/doc/appdev/gssapi.html特别是“名称类型”和“接受器名称”部分。

我使用 GSS_KRB5_NT_PRINCIPAL_NAME 来使事情正常进行。

关于kerberos - gss_acquire_cred 失败,未找到 key 表条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202357/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com