在安裝客戶端證書的公共部分,我收到例外「對象只包含密鑰對的公共部分,也必須提供私人密鑰」。我的應用程序是通過ASP.NET平臺運行的VC#.NET應用程序。該應用程序還使用WSE 2.0將證書導入製作SOAP請求。對象只包含密鑰對
經研究,我發現,這個異常的類型System.Security.Cryptography.CryptographicException的。
我敢肯定的我所有的WSE設置是否正確配置,因爲我可以按主題區分的名稱來找到一個類似的證書。任何想法將不勝感激。
在安裝客戶端證書的公共部分,我收到例外「對象只包含密鑰對的公共部分,也必須提供私人密鑰」。我的應用程序是通過ASP.NET平臺運行的VC#.NET應用程序。該應用程序還使用WSE 2.0將證書導入製作SOAP請求。對象只包含密鑰對
經研究,我發現,這個異常的類型System.Security.Cryptography.CryptographicException的。
我敢肯定的我所有的WSE設置是否正確配置,因爲我可以按主題區分的名稱來找到一個類似的證書。任何想法將不勝感激。
我最近遇到了同樣的問題。我發現one explanation here對我有用。具體來說就是私鑰的權限。完整的信息複製如下。
有,我會 先看幾件事情:
- 你有這個證書的私鑰?
- 你爲youf應用程序來訪問私有 鍵獲得許可?
可以建立你是否有通過Windows證書存儲區查看證書 一個 私鑰。 要實現此目的,請按照下列步驟操作:
- 從Windows開始菜單中選擇運行。
- 在打開:字段中輸入mmc。單擊確定。
- 從文件菜單中選擇「添加/刪除管理單元」。
- 單擊添加按鈕。
- 從Available Standalone Snap-ins列表中選擇「Certificates」。 點擊添加按鈕。
- 選擇「計算機帳戶」。點擊下一步。
- 選擇「本地計算機」。點擊完成。
- 單擊關閉。
- 單擊確定。
- 展開控制檯根目錄下的證書節點並打開 個人存儲。
- 雙擊您正在使用的證書。如果你有一個私人 鍵,顯示畫面也將在那說底部顯示一個消息 「您有一個對應於這個 證書 私鑰」。
如果你有一個私鑰,然後確保 您的應用程序有權 訪問密鑰:
- 打開Windows資源管理器。
- 導航到C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys 文件夾。
- 選擇包含密鑰的文件,WSE將需要 檢索。
- 從文件菜單中選擇屬性。
- 在安全選項卡上,添加ASPNET帳戶,然後選擇完全控制選項 控制選項。
- 說明: 1.確定與證書關聯的MachineKeys文件夾中的哪個密鑰文件是 可能是 困難。一個簡單的方法是注意 創建日期和時間 創建新證書。當您 查看MachineKeys 目錄中的文件時,請檢查Date Modified 字段中的相應日期和 時間。 2.如果您已將系統配置爲在與ASPNET不同的 帳戶下運行,請在授予訪問 證書權限時使用該帳戶 。
遇到相同的異常後:System.Security.Cryptography.CryptographicException,對象只包含密鑰對的公共部分,我校對替代,但不太最佳解決方案。
情況:證書/密鑰查找在Visual Studio IIS Express中運行良好,但是當Web應用程序在適當的IIS服務下運行時,我總是收到'僅包含公鑰的一半'異常。
我使用WSE3 CertificateTool在文件系統上定位私鑰部分,並試圖根據上述答案調整用戶權限設置以給予ASP用戶權限。
我最終的修復不是很漂亮,是爲我的Web服務代碼創建一個新的IIS應用程序池,並設置用戶標識池作爲證書+私鑰的本地機器所有者運行。
我安裝證書的最終位置是「本地計算機/可信人員」。
使用WSE3 CustomPolicyAssertion,C#.NET:
clientToken = X509TokenProvider.CreateToken(StoreLocation.LocalMachine,
StoreName.TrustedPeople, "soap.partnersite.com", X509FindType.FindBySubjectName);
更新應用程序池標識後,沒有私鑰文件覆蓋更改應用程序池所有者時是必要的。
謝謝。這有幫助。 (我有一個私鑰,但我的應用程序無法訪問它)。 – KKP 2010-12-22 00:25:40
檢查此答案關於如何找出哪個機器密鑰對應於證書:http://serverfault.com/a/642279/401044 – jtate 2017-04-04 21:43:57