2016-01-21 65 views
0

我有一個wcf服務託管的Windows服務。我們使用由RSA算法加密的私人證書加密密碼。當以用戶A身份遠程登錄時,證書(pfx文件)安裝在服務器上。應用程序在嘗試獲取私鑰時拋出異常「密鑰在指定狀態中無效」。 Windows服務在帳戶本地系統下運行。在程序集中調用解密函數時,它在帳戶A下運行(模擬用於wcf服務中的不同調用)。該服務器是64位Windows Server 2008 R2。相同的代碼適用於安裝在Windows Server 2012服務器上的其他應用程序中的解密。密鑰無效使用在指定的狀態errror獲取私鑰時

我已經做了以下,但具有相同的錯誤消息結束了:

  1. 安裝證書一次(在certmgr.msc卸載證書,在加密文件夾中刪除鍵集,經檢查發現我得到一個不同的錯誤消息(密鑰集不可用),重新啓動服務器,重新安裝相同的證書,重新啓動服務器)。
  2. 刪除加密文件夾,重新安裝證書。
  3. 我一直信任證書的全系統(參見:https://superuser.com/questions/370217/trust-ssl-certificate-to-local-system-account
  4. 我已經改變了用戶的Windows服務下運行是帳戶A. 我已經檢查了用戶A的訪問使用此命令的私鑰:winhttpcertcfg -l -c CURRENT_USER \ MY MyCertificate。
  5. 要解密的字符串與其他應用程序中使用的字符串長度相同,因爲我們沒有這個問題,所以我們不認爲它與長度有關(字符串長度爲137)。另外,我們明確知道它沒有獲得私鑰。 (參見:https://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.encrypt.aspx(fOAEP設置爲false)
  6. 我心中已經創建了一個新的證書與遠程登錄的用戶A在服務器上使用不同的名稱
  7. 我檢查的域,裝配和mscorlib中是完全可信

需要專家的幫助!我可以使用沒有證書的舊加密,但那不是安全的。並且使用這麼多時間沒有任何結果是如此令人沮喪......

此致敬禮,克里斯蒂娜。

回答

0

我想通過創建一個小應用程序,只做了我的代碼在wcf服務失敗的具體事情。每次它工作,我增加了一些更復雜。這樣我就知道wcf服務必須像上面提到的用戶A那樣運行。另外,我發現如果沒有我在WCFService上進行模擬的要求,它就會工作。對於每種服務方法,我都有這個屬性: [OperationBehavior(Impersonation = ImpersonationOption.Required)]。我仍然使用來自調用此WCFService的應用程序的模擬(因爲WCF服務位於域X中,並且調用它的應用程序位於域Y中),但它在我刪除屬性時起作用。

Kristine :)

相關問題