1

我正在尝试使用 IBM 的 iSeries Telnet Enhancements RFC 4777 中发布的示例在用 C++ 编写的客户端 telnet 应用程序中创建到 System i 服务器的单点登录连接。

给出的代码示例调用AcquireCredentialsHandle,然后调用InitializeSecurityContext对InitializeSecurityContext的调用返回错误SEC_E_TARGET_UNKNOWN,大概是因为它不理解我传递的目标名称。

RFC 4777 说这个目标名称应该是一个带有 kbsrv400 的字符串,然后是我的服务器名称完全限定为小写。我将其解释为“krbsrv400/iseries.domain.com”。我在这里尝试了各种组合,但无法正常工作,还没有找到任何其他使用 MS SSPI API 连接到 IBM System i 的代码示例。

我知道 System i 和域上的 Kerberos 设置工作正常,因为 IBM 自己的 iSeries Access 能够正常登录并使用 kerberos 执行 telnet 5250 登录。

我在登录到域的 Windows 7 上运行。该域是在 Windows 2008 中的 Active Directory 下设置的。我正在使用 MS Visual Studio 2005 构建我的 telnet 应用程序。System i 服务器操作系统是 V6R1。

有没有人让这个示例代码工作?

关于使用它与 System i 对话时目标名称的格式应该是什么的任何建议?

谢谢!

附加信息:2011 年 9 月 8 日

在具有 Windows 2003 托管域的 Windows XP 客户端下已使此工作正常。

RFC 中有两个错误:

1) 它说使用“​​krbsrv400/spi 名称”的名称,但是查看我使用 iSeries Access 登录时生成的 kerbtray 中的票证,我看到实际格式是“krbsvr400/spi 名称”。

2) RFC 说要填充发送到系统 i 的票证长度,但是当我使用 Wireshark 查看 IBM iSeries 访问 telnet 时,我发现他们没有填充它。

更改上述内容使我在 Windows XP 上的应用程序中单点登录工作正常。我在 Windows 7 上仍然遇到问题。

这是一个不同的域(由公司管理,在世界各地的 Windows 2008 和 Windows 2003 服务器上)和不同的 iSeries。

奇怪的是,我可以在 System i Access OK 中使用 Kerberos 登录,但是当我查看 kerbtray 时,我没有看到我机器上的系统的 kerbsvr400/... 票证,就像我在 Windows XP 上所做的那样。我的应用程序无法运行并因 SEC_E_TARGET_UNKNOWN 错误而失败。

4

0 回答 0