使用RFC 4777中的示例代码 - InitializeSecurityContext返回错误

时间:2011-07-08 11:23:48

标签: c++ security ibm-midrange kerberos sspi

我正在尝试使用在C ++编写的客户端telnet应用程序中的IBM的iSeries Telnet增强功能RFC 4777中发布的示例创建与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登录OK并执行telnet 5250登录。

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

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

使用它与System i交谈时,目标名称的格式应该是什么建议?

谢谢!

其他信息:9/8/2011

在具有Windows 2003管理域的Windows XP客户端下运行正常。

RFC中有两个错误:

1)据说使用" krbsrv400 / spi name"但是看着我在使用iSeries Access登录时生成的kerbtray中的票证,我看到实际的格式是" krbsvr400 / spi name"。

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

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

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

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

0 个答案:

没有答案