我正在本地域测试JGSS示例,但是遇到了基于主机的服务问题。以下是设置:
获取从命令ktpass -princ myservice/host.my.example.com@MY.EXAMPLE.COM -mapuser krbsrv@my.example.com -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCILAL -pass krbpass -out myservice-host.keytab
系统管理员运行setspn -S myservice/host.my.example.com krbsrv
为活动目录设置SPN。
通过以下方式创建serverprincipal:
GSSName serverName = manager.createName(serverPrinc, GSSName.NT_HOSTBASED_SERVICE);
这将导致java.security.PrivilegedActionException: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7))
例外。
但如果我使用createName()
致电GSSName.NT_USER_NAME
,则不会有任何错误。
我已向系统管理员询问并确认setspn -L krbsrv
和setspln-X myservice/host.my.example.com
没有重复。
那么有什么我搞砸了吗?服务器在Solaris上运行,客户端在Windows上运行,两者都在Java 6u27上。
非常感谢建议。