当前位置: 首页 > 知识库问答 >
问题:

SPNEGO使用了错误的KRBTGT主体名称

王亮
2023-03-14

我正在尝试为我们的网站启用Kerberos身份验证-这个想法是让用户登录到Windows AD域获得自动登录(和初始帐户创建)

在我处理Windows方面的问题之前,我想让它在本地工作。因此,我使用git@github.com:ist dsi/docker kerberos。吉特

Web服务器位于本地docker容器中,其中编译了nginx和spnego模块。KDC/KADMIN容器172.17.0.2,可从我的Web服务器容器访问。

这是我当地的krb。形态:

default_realm = SERVER.LOCAL

[realms]
SERVER.LOCAL = {
                kdc_ports = 88,750
                kadmind_port = 749
                kdc = 172.17.0.2:88
                admin_server = 172.17.0.2:749
        }

[domain_realms]
  .server.local = SERVER.LOCAL
  server.local = SERVER.LOCAL

还有krb。Web服务器容器上的conf

[libdefaults]
  default_realm = SERVER.LOCAL
  default_keytab_name  = FILE:/etc/krb5.keytab
  ticket_lifetime      = 24h
  kdc_timesync         = 1
  ccache_type          = 4
  forwardable          = false
  proxiable            = false

[realms]
  LOCALHOST.LOCAL = {
    kdc_ports = 88,750
    kadmind_port = 749
    kdc = 172.17.0.2:88
    admin_server = 172.17.0.2:749
  }

[domain_realms]
  .server.local = SERVER.LOCAL
  server.local = SERVER.LOCAL

这是主体和keytab配置(keytab被复制到 /etc/krb5.keytab下的web容器)

rep ~/project * rep_krb_test $ kadmin -p kadmin/admin@SERVER.LOCAL -w hunter2
Authenticating as principal kadmin/admin@SERVER.LOCAL with password.
kadmin:  list_principals
K/M@SERVER.LOCAL
kadmin/99caf4af9dc5@SERVER.LOCAL
kadmin/admin@SERVER.LOCAL
kadmin/changepw@SERVER.LOCAL
krbtgt/SERVER.LOCAL@SERVER.LOCAL
noPermissions@SERVER.LOCAL
rep_movsd@SERVER.LOCAL
kadmin:  q

rep ~/project * rep_krb_test $ ktutil
ktutil:  addent -password -p rep_movsd@SERVER.LOCAL -k 1 -f
Password for rep_movsd@SERVER.LOCAL:
ktutil:  wkt krb5.keytab
ktutil:  q

rep ~/project * rep_krb_test $ kinit -C -p rep_movsd@SERVER.LOCAL
Password for rep_movsd@SERVER.LOCAL:

rep ~/project * rep_krb_test $ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: rep_movsd@SERVER.LOCAL

Valid starting     Expires            Service principal
02/07/20 04:27:44  03/07/20 04:27:38  krbtgt/SERVER.LOCAL@SERVER.LOCAL

相关的nginx配置:

server {

  location / {
    uwsgi_pass  django;
    include     /usr/lib/proj/lib/wsgi/uwsgi_params;

    auth_gss on;
    auth_gss_realm SERVER.LOCAL;
    auth_gss_service_name HTTP;
  }
}

最后,etc/主机

# use alternate local IP address
127.0.0.2 server.local server

现在,我尝试使用curl访问此项:

*   Trying 127.0.0.2:80...
* Connected to server.local (127.0.0.2) port 80 (#0)
* gss_init_sec_context() failed: Server krbtgt/LOCAL@SERVER.LOCAL not found in Kerberos database.
* Server auth using Negotiate with user ''
> GET / HTTP/1.1
> Host: server.local
> User-Agent: curl/7.71.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
....

正如您所看到的,它正在尝试使用SPN“krbtgt/LOCAL@SERVER.LOCAL而kinit有“krbtgt/SERVER”。LOCAL@SERVER.LOCAL“作为SPN

我怎样才能让它工作?

提前感谢...

共有1个答案

简滨海
2023-03-14

所以我需要

auth_gss_service_name HTTP/server.local;

遇到问题的其他提示:

  1. 确保keytab文件可被用户www数据或任何用户的Web服务器进程读取
  2. 确保keytab主体的顺序正确
  3. 使用exportKRB5_TRACE=/dev/stderr和curl来测试-kerberos给出了它正在做什么以及失败原因的非常详细的日志
 类似资料:
  • 到目前为止,我在powershell脚本方面还不够强大,每天都在学习。 有人能帮助从Azure获取所有用户的详细信息,以便用expandprinipalgroups分配他们的角色吗 我尝试了一个用户,它运行良好,但当我为所有azuser运行查询时,它会出错。 我试着低于1 $user = (Get-AzADUser)。用户原则名称 Get-AzRoleAssignment -SignInName

  • 安装了带有pip(不是包管理器)的MkDocs 安装了n个带有pip的MkDocs主题 更新了mkdocs.yaml以添加: 我错过了什么?

  • currency_pair的DDL 我的实体类如下:- 货币实体- 注意:我无法更改ddl查询,那么我可以做什么来修复实体类

  • 我有一个奇怪的问题,我不知道是什么问题。 我有一个多模块java maven项目,其结构如下: 我在父pom(A)中添加了一个依赖项: 注:除 在模块C和D中,有必要使用版本2.3.0,因此我使用此依赖项重写父pom A的版本1.8.5: 我在模块C和D的pom中添加了这个依赖项。C也是D的依赖项。所以当我尝试构建项目时,我得到以下错误: 因此,maven认为模块C的quartz版本是1.8.5,

  • 我正在使用Spring Data Elasticsearch来获取一些聚合,并尝试使用ReactiveElasticsearchClient。我从Elasticsearch得到一个500错误,但我不知道如何获得响应的主体,以便调试请求的错误。以下是我目前掌握的情况: 为组织启用跟踪日志记录。springframework。数据elasticsearch。客户WIRE,将记录请求正文,但响应的日志行

  • 我试图用一个网络客户端来替换现有的客户机代码。因此,大多数调用都需要阻塞,这样应用程序的主要部分就不需要更改。当谈到错误处理时,这会带来一些问题。必须涵盖以下几种情况: 在成功的情况下,响应包含A类型的JSON对象 在错误情况下(HTTP状态4xx或5xx)响应可能包含B类型的JSON对象 在某些具有响应状态404的请求上,我需要返回一个与成功响应类型匹配的空 为了产生正确的错误(