在證書存儲中,很難找到與特定 X.509 憑證相關聯的私鑰檔案位置和名稱。 FindPrivateKey.exe 工具有助於此過程。
這很重要
您必須先建置 FindPrivateKey 範例 ,才能使用它。
X.509 憑證是由系統管理員或計算機中的任何使用者所安裝。 然而,執行於不同帳戶的服務仍可能存取憑證。 例如,NETWORK SERVICE 帳戶。
此帳戶可能無法存取私鑰檔案,因為憑證原本未安裝。 FindPrivateKey 工具會提供指定 X.509 憑證私鑰檔案的位置。 一旦您知道特定 X.509 憑證私鑰檔案的位置,即可新增許可權或移除此檔案的許可權。
使用憑證進行安全性的範例會使用 Setup.bat 檔案中的 FindPrivateKey 工具。 找到私鑰檔案之後,您可以使用其他工具,例如 Cacls.exe ,將適當的訪問許可權設定至檔案。
在用戶帳戶下執行 Windows Communication Foundation (WCF) 服務時,例如自我裝載可執行檔,請確定使用者帳戶具有檔案的只讀存取權。 在 Internet Information Services (IIS) 下執行 WCF 服務時,服務執行的預設帳戶是 IIS 7 和舊版上的網路服務,或 IIS 7.5 和更新版本上的應用程式集區身分識別。 如需詳細資訊,請參閱 應用程式集區身分識別。
讀取許可權
當存取過程沒有讀取憑證的許可權時,您會看到類似下列範例的例外狀況訊息:
System.ArgumentException was unhandled
Message="The certificate 'CN=localhost' must have a private key that is capable of key exchange. The process must have access rights for the private key."
Source="System.ServiceModel"
發生這種情況時,請使用 FindPrivateKey 工具來尋找私鑰檔案,然後設定服務執行所在進程的存取權。 例如,這可以使用 Cacls.exe 工具來完成,如下列範例所示:
cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /E /G "NETWORK SERVICE":R
慣例—Command-Line 條目
“[option]” 代表一組選擇性的參數。
“{option}” 代表一組必要的參數。
“option1 | option2” 代表選項集之間的選擇。
“<value>” 代表要輸入的參數值。
用法
FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]
地點:
| 參數 | 說明 |
|---|---|
<subjectName> |
憑證的主體名稱 |
<thumbprint> |
憑證的指紋(您可以使用 Certmgr.exe 工具來尋找此憑證) |
-f |
僅輸出檔名 |
-d |
僅限輸出目錄 |
-a |
輸出絕對檔名 |
如果在命令提示字元中未指定任何參數,則會顯示具有此資訊的說明文字。
範例
此範例會在目前使用者的 Personal 存放區中,尋找主體名稱為 “CN=localhost” 的憑證檔名。
FindPrivateKey My CurrentUser -n "CN=localhost"
此範例會在目前使用者的 Personal 存放區中尋找主體名稱為 “CN=localhost” 的憑證檔名,並輸出完整的目錄路徑。
FindPrivateKey My CurrentUser -n "CN=localhost" -a
此範例會尋找指紋為 「03 33 98 63 d0 47 e7 48 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52」 的憑證檔名,位於本機計算機的個人存放區中。
FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"