如何授予使用者訪問 Windows Server 2012 上的證書儲存的權限?
在過去的幾天裡,我一直在與一個似乎無法解決的問題作鬥爭。儘管我對某些管理任務有所了解,但我不是管理員。
我有一個使用 XapSignTool.exe 簽署 .xap 包的 PowerShell 腳本。提供了私鑰和密碼。當我以管理員組中的使用者身份登錄時執行腳本時,它工作正常。
我還在同一台機器上執行 Windows 遠端管理服務。在另一台 Linux 機器上,我使用 winrm 協議呼叫帶有所需參數的 PowerShell 腳本。然後 XapSignTool.exe 工具,或者特別是在下面使用的 signtool.exe,會拋出錯誤:
Error information: "Error: Store::ImportCertObject() failed." (-2146893808/0x80090010)
我查找了程式碼並找出了它的含義,即
NTE_PERM
0x80090010
訪問被拒絕。
ImportCertObject() 方法的名稱讓我覺得該工具試圖將提供的私鑰導入證書儲存。
有趣的是,如果我在登錄時首先執行腳本並且它可以工作,那麼通過 winrm 進行的後續呼叫也會工作。這使我相信證書已通過管理員使用者正確導入。
WRM 服務在網路服務帳戶下執行,因此我假設它沒有權限插入證書儲存區。我將 NS 帳戶放在管理員組中,希望它可以工作,但它沒有。對於測試,我將 \Everyone 放入管理員組,並且對 PowerShell 腳本的 winrm 呼叫仍然失敗,並顯示“拒絕訪問”。
為什麼是這樣?如何向使用者授予對證書儲存的訪問權限?
我還希望能夠為許多此類證書執行此操作,因此必須自動化。
經過幾天的研究,我沒有找到最低有意義水平的原因,但略高於 tat。
該腳本在它正在登錄的使用者已經在機器上以互動方式登錄時工作。如果我退出機器,那麼腳本將停止工作。
這是 WinRM 的一個問題,解決方法之一是改用 CredSSP。解決此問題的另一種方法是將整個解決方案更改為 HTTP 服務或消息隊列使用者。
遇到類似的問題,signtool.exe 返回“錯誤:Store::ImportCertObject() 失敗”。(-2146893808/0x80090010)。就我而言,我是通過 ssh 從 Linux 連接的,而 sshd 託管在 Cygwin 環境 shell 中。
以下文章位於https://cygwin.com/ml/cygwin/2008-10/msg00588.html。似乎很相關。(另見 - https://cygwin.com/ml/cygwin/2007-01/msg00651.html)
通過 ssh 登錄時,請使用密碼驗證而不是公鑰驗證。密碼身份驗證會創建一個有效的登錄會話,因此您會被正確辨識並且問題應該會消失。
底線是基於使用者密碼的登錄或設置具有適當權限的服務帳戶。在使用基於證書的身份驗證時,使用者的模擬似乎無法按預期工作。
雖然是舊文章,但希望其他人可能會發現它有幫助。