【问题标题】:WCF X509 certificate Auth Type Kerberos to NTLMWCF X509 证书身份验证类型 Kerberos 到 NTLM
【发布时间】:2011-11-10 13:09:57
【问题描述】:

我在将我的 WCF 客户端应用程序从 Dev 部署到 Staging 区域(与实时区域相同)时遇到问题。

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

任何人都可以了解解决(或绕过)这个问题的最佳方法吗?

谢谢

编辑: 例外情况如下:

在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 小时)在 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(字节[] rawData, IntPtr 密码, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle & pCertCtx) 在 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(字节[] rawData,对象密码,X509KeyStorageFlags keyStorageFlags)在 System.Security.Cryptography.X509Certificates.X509Certificate..ctor(字节 [] rawData,字符串密码)在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(字节 [] rawData,字符串密码)在 ...CertificateManager.GetClientCertificate(typCertificateTypes 证书类型)在

注意:我获取的证书文件来自 SQL 数据库,而不是存储在本地证书存储中。

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

【问题讨论】:

  • 你能粘贴你得到的错误吗?
  • 已更新异常问题
  • 你能冒充管理员获取证书吗?我们就是这样解决的。
  • 感谢 the_ajp。您能否详细说明一下或将我引向示例/文章.thx

标签: wcf x509certificate kerberos ntlm


【解决方案1】:

这样的描述有​​点不准确吧?您使用的是什么安全模式,您的安全配置中的证书有什么意义?

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

不反映生产环境的暂存环境无用。一旦它不反映真实环境,它就不再取决于您是使用不同的身份验证机制还是根本不使用身份验证。如果您计划在生产中使用域帐户和 Kerberos,您必须拥有带有测试域和配置 Kerberos 的暂存环境。否则,您根本不必使用 staging,因为无论如何您都会修复生产中的真正集成错误。

好的,所以您的问题很模糊,因为它显然与帐户无关,而且 WCF 的安全性根本不受 Kerberos 或 NTLM 的影响,因为您使用客户端证书对服务进行身份验证,不是吗? ?异常堆栈跟踪表明您的代码无法从原始数据(从 SQL 服务器加载?)创建有效证书。因此,要么 SQL 数据库中的数据不正确,要么密码不正确,要么您没有正确加载数据。

【讨论】:

  • 对此我深表歉意。我已经更新了问题描述。如果您需要更多信息,请告诉我。谢谢,
【解决方案2】:

当您的 ASP.net 应用程序在其下运行的应用程序池无权访问您要为 WCF 服务调用附加的客户端证书的私钥时,通常会出现此错误。请确保应用程序池身份可以访问证书私钥。您还可以粘贴您用来加载证书并将其附加到 WCF 服务调用的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2013-08-01
    • 2010-10-25
    • 2014-08-18
    相关资源
    最近更新 更多