2011-09-05 173 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服務調用。