【问题标题】:Issue while configuring Kerberos on Websphere Application Server在 Websphere Application Server 上配置 Kerberos 时出现问题
【发布时间】:2024-05-20 20:15:02
【问题描述】:

团队, 我有一个关于使用 Kerberos 身份验证的单点登录的问题。

我们为“POC.MAIL.COM”之类的域生成了一个密钥表文件,我们的服务器托管在“SW.MAIL.COM”上。当我们的应用程序在 Websphere Application Server 上运行时,我们尝试按照文档 (page no:167)http://www.redbooks.ibm.com/redbooks/pdfs/sg247771.pdf 中给出的方式设置 Kerberos 配置。 我们正面临“无法获取主体服务 HTTP/server1.SW.MAIL.COM@SW.MAIL.COM 的凭据”的错误消息。有人可以帮我解决这个问题吗..?

如果需要任何其他信息,请发表评论..

当我尝试在“Kerberos 身份验证机制页面”上设置 krb5.conf 和 keytab 文件时,我们收到此错误。

当我根据您的输入运行命令 klist 时,我得到如下输出

"密钥表:/etc/krb5/pocsso.keytab

条目数:1

[1.] 主体:HTTP/server1.sw.mail.com@POC.MAIL.COM KVNO: 12 "

更新 .

票证缓存:FILE:/tmp/krb5cc_38698 默认主体:pocsso1@POC.MAIL.COM 有效的启动过期服务主体 01/09/2014 16:15 02/09/2014 02:21 krbtgt/POC.MAIL.COM@POC.MAIL.COM 续订至 08/09/2014 16:15

【问题讨论】:

  • 你是如何创建keytab的?检查您的主机名是否不是 server1.sw.mail.com(小写)。一般来说,您可能在密钥表中的服务器名称和 SPN 不匹配。
  • 主机名相同。为什么它试图获取 SW.MAIL.COM 而不是 POC.MAIL.COM 的主体
  • 因为您生成了错误的 keytab/SPN 或者您在 WAS 中创建了错误的配置。您的 keytab 应该生成到 HTTP/server1.SW.MAIL.COM@POC.MAIL.COM 并且在您的 WAS SPNEGO 配置中,您应该将服务器名称设置为 server1.SW.MAIL.COM 和领域 POC.MAIL.COM
  • 你是如何调用 kinit 的?
  • 我给你写信是为了创建新的 keytab,因为旧的 keytab 是错误的。你做了吗?结果如何?将您如何创建密钥表和 krb5.conf 文件的内容附加到您的问题命令行。

标签: single-sign-on kerberos websphere-7


【解决方案1】:

仅在 Global security > SPNEGO web authentication 上指定它,而不是在 Kerberos 配置页面上。如果您的 krb5.conf 文件中的 keytab 路径正确,只需提供 conf 文件的路径就足够了(keytab 是可选的)。

更新
在过滤器定义中你应该有:

Host name: server1.sw.mail.com  
Kerberos realm name:  POC.MAIL.COM  
Filter criteria: yourFilterCriteria
Trim Kerberos realm from principal name - checked  

在此处查看配置详细信息:Enabling and configuring SPNEGO web authentication using the administrative console

web.xml 中用于 Java EE 安全性的最小配置。您必须在服务器配置中启用Application Security,并将用户角色映射到注册表中的某些用户/组。

<security-constraint>
        <display-name>constraint</display-name>
        <web-resource-collection>
            <web-resource-name>all resources</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>userRole</role-name>
        </auth-constraint>
    </security-constraint>

【讨论】:

  • 取决于应用程序或其他内容(如果需要)。您在我在回答中附加的页面上有详细信息。我通常使用:request-url%=yourContextRoot;request-url!=noSPNEGO,这意味着 - 对所有包含 yourContextRoot 且不包含 noSPNEGO 的 uri 使用 SPNEGO。如果需要,它允许我通过向 url 提供 &noSPNEGO 来访问绕过 SPNEGO 的应用程序。
  • 即使使用 SPNEGO,我也会遇到同样的错误。
  • 你的错误到底是什么? SystemOut.log 中是否有与之相关的异常/消息?
  • 它仍然指向错误的领域应该是POC.MAIL.COM,所以你的配置有问题。
  • @Chilukuri 您需要提供过滤条件 - www-01.ibm.com/support/knowledgecenter/SSAW57_8.0.0/…
【解决方案2】:

回答有点晚了。

通过运行 ktpass 命令重新生成 keytab 文件:

ktpass -out file.keytab -princ HTTP/server1.SW.MAIL.COM@POC.MAIL.COM -mapuser your-user -pass your-pwd -ptype KRB5_NT_PRINCIPAL

解决错误:

org.ietf.jgss.GSSException, major code: 11, minor code: 0
    major string: General failure, unspecified at GSSAPI level
    minor string: Cannot get credential for principal HTTP/appserver.example.com@EXAMPLE.COM

在生成 keytab 文件时归结为以下规则:

  • 主体服务必须遵循格式

&lt;service name&gt;/&lt;fully qualified hostname&gt;@KerberosRealm

  • 仔细检查主要服务的拼写
  • 服务名必须全部大写,即HTTP而不是http
  • Kerberos 领域也必须全部大写,并且
  • 必须在 /etc/host 文件或 DNS 服务器中找到主机名。

来源:

【讨论】: