- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我的 GSS 演示应用程序(在服务器端)收到 KrbException:解密字段的完整性检查失败 (31)。现在我正在寻找这个的原因。我怀疑,这是因为
第二个表示服务主体是为一台机器 xxx0815.domain.net 生成的,所以 SPN 是 HTTP/xxx0815.domain.net@DOMAIN.NET。而我的机器不是那个,但是我有keytab文件所以服务器的登录方法成功。
我的怀疑是正确的还是我犯了另一个错误?
服务器配置和源代码:
服务器配置文件
Server {
com.sun.security.auth.module.Krb5LoginModule
required
isInitiator=false
doNotPrompt=true
useKeyTab=true
keyTab="gssdemo.keytab"
storeKey=true
principal="HTTP/xxx0815.domain.net@DOMAIN.NET"
debug=true;
};
GSSServer.java(省略了样板文件)
GSSManager manager = GSSManager.getInstance();
GSSName serverName = manager.createName(getServerName(), null);
GSSCredential serverCred = manager.createCredential(serverName,
GSSCredential.INDEFINITE_LIFETIME,
createKerberosOid(),
GSSCredential.ACCEPT_ONLY);
GSSContext context = manager.createContext(serverCred);
System.out.println("Context created successfully. Now incoming tokens could be accepted.");
ServerSocket serverSocket = new ServerSocket(55555);
SocketAdapter ca = new SocketAdapter(serverSocket.accept());
while (!context.isEstablished()) {
byte[] inToken = ca.readToken();
byte[] outToken = context.acceptSecContext(inToken, 0, inToken.length);
if (outToken != null) {
ca.sendToken(outToken);
}
}
System.out.println("Context established");
System.out.println("Connected user is: " + context.getSrcName());
context.dispose();
客户端配置和源代码:
客户端.conf
Client {
com.sun.security.auth.module.Krb5LoginModule
required
useTicketCache=true
debug=true;
};
GssClient.java(省略样板文件)
GSSManager manager = GSSManager.getInstance();
GSSName clientName = manager.createName(getClientName(), null);
GSSCredential clientCred = manager.createCredential(clientName,
8 * 3600,
createKerberosOid(),
GSSCredential.INITIATE_ONLY);
GSSName serviceName = manager.createName("HTTP/xxx0815.domain.net@DOMAIN.NET", null);
GSSContext context = manager.createContext(serviceName,
createKerberosOid(),
clientCred,
GSSContext.DEFAULT_LIFETIME);
context.requestMutualAuth(true);
context.requestConf(false);
context.requestInteg(true);
System.out.println("Establishing context");
SocketAdapter ca = new SocketAdapter(new Socket("localhost", 55555));
byte[] inToken = new byte[0];
while (true) {
byte[] outToken = context.initSecContext(inToken, 0, inToken.length);
if (outToken != null) {
ca.sendToken(outToken);
}
if (context.isEstablished()) {
break;
}
inToken = ca.readToken();
}
System.out.println("Context established: " + context.isEstablished());
context.dispose();
我已经检查了传出和传入的网络数据 - 双方都相同,所以我可以排除那里的问题(我对输出进行了 BASE64 编码,然后通过流发送它。我认为没有太多那里可能会出错...)。
我得到的异常:
Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Integrity check on decrypted field failed (31))
at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:741)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
at de.westlb.mrm.sandbox.gss.GssServer.acceptAndEstablish(GssServer.java:88)
at de.westlb.mrm.sandbox.gss.GssServer.run(GssServer.java:66)
... 4 more
Caused by: KrbException: Integrity check on decrypted field failed (31)
at sun.security.krb5.internal.crypto.DesCbcEType.decrypt(DesCbcEType.java:154)
at sun.security.krb5.internal.crypto.DesCbcMd5EType.decrypt(DesCbcMd5EType.java:33)
at sun.security.krb5.internal.crypto.DesCbcEType.decrypt(DesCbcEType.java:125)
at sun.security.krb5.internal.crypto.DesCbcMd5EType.decrypt(DesCbcMd5EType.java:33)
at sun.security.krb5.EncryptedData.decrypt(EncryptedData.java:168)
at sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:267)
at sun.security.krb5.KrbApReq.<init>(KrbApReq.java:134)
at sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:79)
at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:724)
... 8 more
最佳答案
如果完整性检查失败,表明数据没有被正确发送/接收(这是一个不正确的错误消息)。换句话说,发生了一些修改。
我知道您说您已检查发送的数据是否与网络级别的接收数据匹配,但是您确定它在发送之前或接收之后没有损坏吗?我建议您先检查您的代码。
编辑:在回答您的问题时,可以将服务主体(实际上是任何票证)绑定(bind)到特定机器,但这通常是根据 IP 地址来完成的。在任何情况下,类似的事情都会导致不同的更高级别的错误。
您收到的错误听起来像是首先无法解密票证。一个可能的原因是它使用了错误的 key ,这可能与您复制 key 表有关。使用错误的票证也可能导致错误的 key (因为 kerberos 基本上提供了 key 管理协议(protocol))。您是否缓存了一张旧的/不正确的票?
关于java - 服务主体名称 (SPN) 是否绑定(bind)到特定计算机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435091/
首先,使用 setspn 命令为用户注册服务主体名称。 setspn -a CS/dummy@abc.com dummyuser setspn -l dummyuser 给出输出为 CS/dummy@
当我使用服务主体使用 az 登录时 例如az login --service-principal -u“12121”-p“1212”--tenant“12121” 它将显示它有权访问的所有订阅列表 [
我有一个队列,我想使用 SJF 算法(也称为 SPN)插入该队列(接下来是最短流程)我使用一个函数来估计“工作”。我想要推送的元素是结构,我使用该结构的参数获得“工作”。例如: typedef str
据我了解, SPN 是 Windows 服务的身份验证工具。 Kerberos 是一个用户认证服务 SPNEGO-GSSAPI 是第三方 API能够使用这些服务。 SSPI:是发送的中立层从 SPNE
我现在正在使用 GSSAPI 对跨平台应用程序进行 Kerberized。虽然我不太清楚 UPN 和 SPN 之间的区别。 开发环境是 CentOS 6.4 上的 Samba4 AD DC 服务器,带
我收到“net.pipe://localhost 没有端点监听”错误,如其他地方所述,但我似乎找不到真正的答案。 这是问题的一个很好的标识: http://kennyw.com/indigo/102
我想了解 Azure AD 上下文中 SPN 和 UPN 之间的区别。我的理解是在Azure AD中建立身份有三种方式 用户输入用户名和密码来建立身份 使用 ClientId 和 Secret Key
我目前正在尝试使用 SPNEGO library 将 Java 客户端实现到受 SPNEGO 保护的 Web 服务来自 SourceForge(服务器使用相同的库)。我无法让它成功验证,我的请求总是以
我在运行本地 Windows 帐户的 Windows 服务中托管了一个 wcf 应用程序。我需要为此帐户设置 SPN 吗?如果是这样,SPN 需要设置的协议(protocol)是什么?我知道如何通过
我需要通过服务主体访问 Azure KeyVault 的帮助。我当前有两个订阅需要通信并访问另一个订阅的 Key Vault,但为此我需要通过 SPN 进行连接。我查看了 Get-AzureRmKey
我在 VSTS 中使用以下 Azure Powershell 命令。 (Get-AzureKeyVaultSecret -vaultName "debugkv" -name "CoreConfig-S
目前,我的 GSS 演示应用程序(在服务器端)收到 KrbException:解密字段的完整性检查失败 (31)。现在我正在寻找这个的原因。我怀疑,这是因为 客户端和服务器应用程序在同一台机器上运行(
我正在尝试在 Windows Server 2008 上配置 Tomcat 6 以使用识别多个 Kerberos 票证,但运气不佳。我有一个包含多个 SPN 的 key 表,但似乎只能在 spnego
我刚刚完成在 AD 中使用 SPN 注册 SQL Server 2008 R2。我可以使用 SQLNCLI10.1 通过 OLEDB 使用以下关键字进行连接: Server SPN=MSSQLSvc/
我的目标是使用 SASL 和来自 Ubuntu 终端的 DIGEST-MD5 机制来验证“Active Directory 的用户”。 我输入了以下命令: ldapsearch -H ldap://t
我使用 DCOM 在 Windows 网络上提供各种应用程序服务,使用 Kerberos 处理身份验证。该系统通常运行良好,但我在从单独的(受信任的)域访问服务时遇到了问题。特别是,该服务无法回调客户
在我们的一个网络中,我们正在使用 netTCPBinding。托管在作为域帐户运行的 Windows 服务中的 WCF 服务。 从事件查看器中,我可以看到我的 WCF 服务使用 Kerberos 身份
我已经设置了一个具有读取和写入服务主体名称权限的 SQL Server 服务帐户。当 SQL Server 启动时,我在日志中收到预期消息,显示服务帐户已成功注册 SPN: The SQL Serve
有没有人有幸在 Windows 域上查询/更改 SPN? Google 上的大多数点击都与 SQL 相关:我自己找不到任何关于如何执行此操作的信息。最重要的事情是查询 SPN 配置并检查重复项。 根据
您好,我正在 Linux 环境中使用 Centrify 配置 Kerberos。我对 Windows 更加熟悉。 我知道在 Linux 中使用 MIT Kerberos,我可以使用 SPN 作为 UP
我是一名优秀的程序员,十分优秀!