2011-09-05 177 views
0

我在从开发部署到Stagging区域(与现场一样)中部署我的WCF客户端应用程序时出现问题。WCF X509证书身份验证输入Kerberos到NTLM

在我的ASP.NET应用程序。 (具有WCF客户端)使用域用户作为应用程序池。这意味着,当我对X509证书进行身份验证时,它使用Kerberos身份验证,因为这是Windows域帐户。现在在错综复杂的环境中,我们必须使用本地计算机帐户来访问应用程序池。这意味着在使用X509证书进行身份验证时,它在使用NTLM的交错环境中。这不起作用。

任何人都可以请指点什么是解决(或解决)这个问题的最佳方法?

由于

编辑: 例外如下:

在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(的Int32 小时)在 System.Security.Cryptography.X509Certificates.X509Utils .LoadCertFromBlob(Byte [] rawData,IntPtr password,UInt32 dwFlags,Boolean persistKeySet, SafeCertContextHandle & pCertCtx)at Syste m.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(字节[] RAWDATA,对象密码,X509KeyStorageFlags keyStorageFlags)在 System.Security.Cryptography.X509Certificates.X509Certificate..ctor(字节[] RAWDATA,字符串password)在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(字节[] RAWDATA,字符串密码)在

注 ... CertificateManager.GetClientCertificate(typCertificateTypes CertificateType):我是证书文件从SQL数据库获取并不存储在本地证书存储区中。

该应用程序使用WCF客户端使用X509证书与远程服务器对话。我们没有控制服务部分。代码/配置之间的唯一区别是ASP.NET应用程序池帐户。此帐户是dev上的域用户帐户,但是Stagging和Prod上的本地用户帐户。 (我知道不要问!它不是我的选择或决定:))

+0

可以用你粘贴错误吗? – rauts

+0

已更新该例外的问题 – daehaai

+0

您是否可以冒充管理员获取证书?我们就是这样解决的。 – albertjan

回答

1

这是一点点不准确的描述是不是?您使用的安全模式是什么以及安全配置中证书的要点是什么?

即使有域帐户,它仍然可以使用NTLM,因为它仍然是单圈。它在暂存环境中无法正常工作的原因是托管服务的服务器不知道承载服务客户端的服务器的本地用户。你可以尝试丑陋的黑客攻击:在第二台服务器上创建一个用户名和密码完全相同的本地用户。但这只是浪费时间,因为您可以通过同样的方式简单地关闭身份验证,因为:

不反映生产环境的临时环境是 无用。一旦它不能反映真实的环境,它就不依赖于你是否使用不同的认证机制,或者你根本不使用认证。如果您计划在生产中使用域帐户和Kerberos,您必须 必须具有包含测试域和配置的Kerberos的分段环境。否则,你根本不必使用staging,因为无论如何你都会在生产中修复真正的集成错误。

好了,你的问题是模糊的,因为它显然没有无关的帐户,并因为您正在使用的客户端证书验证服务WCF的安全不是由Kerberos或NTLM影响可言,不是吗你呢?异常堆栈跟踪表示您的代码无法从原始数据创建有效证书(从SQL Server中加载?)。因此SQL数据库中的数据不正确,密码不正确或者没有正确加载数据。

+0

我对此表示歉意。我已更新问题描述。如果您需要更多信息,请告诉我。谢谢, – daehaai

1

此错误通常出现在运行ur asp.net应用程序的应用程序池无法访问要附加到WCF服务调用的客户端证书的私钥的情况下。请确保应用程序池标识可以访问证书私钥。你也可以粘贴你使用的代码加载并附加证书到WCF服务调用。