我有一個設定工具,可以為網站設定 IIS SSL 憑證。它在 IIS 配置中為「預設網站」建立一個新綁定,然後為其指派 SSL 憑證。當我代表管理帳戶運行該工具時,該工具工作正常,但在常規使用者帳戶下運行時會失敗,並出現「存取被拒絕」錯誤。
這是該工具的程式碼:
using Microsoft.Web.Administration;
using System;
using System.Globalization;
using System.Linq;
namespace TestIisSslCert
{
class Program
{
static void Main(string[] args)
{
try
{
var sslCertThumbprint = "733AD4B4A8FA5F7DE2F4640F91B176BDB1D2BE25";
// calculating certificate hash
var certificateHash = new byte[20];
for (int i = 0, j = 0; i < sslCertThumbprint.Length; i += 2, j++)
{
string s = sslCertThumbprint[i].ToString().ToLower() + sslCertThumbprint[i + 1].ToString().ToLower();
byte o = byte.Parse(s, NumberStyles.HexNumber);
certificateHash[j] = o;
}
// adding a binding with a reference to the certificate:
var siteName = "Default Web Site";
using (var serverManager = new ServerManager())
{
var site = serverManager.Sites[siteName];
var bindings = site.Bindings.ToList();
foreach (var binding in bindings)
{
if (binding.Protocol == "https")
site.Bindings.Remove(binding);
}
site.Bindings.Add(":443:", certificateHash, "My");
serverManager.CommitChanges();
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.ReadKey();
}
}
}
這是我以用戶身份運行它時遇到的錯誤:
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
at Microsoft.Web.Administration.Interop.IAppHostMethodInstance.Execute()
at Microsoft.Web.Administration.Binding.AddSslCertificate(Byte[] certificateHash, String certificateStoreName)
at Microsoft.Web.Administration.BindingManager.Save()
at Microsoft.Web.Administration.ServerManager.CommitChanges()
我已添加對以下資料夾的完全控制:
- “C:\Windows\System32\inetsrv\config”
- “C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys”
- “C:\inetpub\wwwroot”
我也嘗試了以下鏈接,但沒有幫助:https://support.comodo.com/index.php?/Knowledgebase/Article/View/1129/37/access-denied-exception-from-hresult-0x80070005-e_accessdenied
我需要向我的用戶授予任何其他安全設定或策略嗎?
一些額外的細節: 我檢查了 ProcessMonitor 中是否有任何可能需要權限的內容,但沒有找到任何註冊表項或帶有「ACCESS DENIED」的檔案。我只添加了一個註冊表項,但它沒有任何區別:HKLM\System\CurrentControlSet\Services\WinSock2\Parameters。
此外,還可以新增沒有憑證的新綁定,但是當我指定憑證雜湊時,它會失敗。就好像某些政策不允許我執行程式碼,可能與 COM 相關,因為 Microsoft.Web.Administration 是 COM 介面的包裝器,但我不確定。
答案1
我嘗試使用 netsh 運行相同的操作:
netsh http add sslcert ipport=0.0.0.0:443 certhash=35e010f567bf61
62e8eb7974ee98eb64c4ed2c55 appid={00112233-4455-6677-8899-AABBCCDDEEFF}
SSL Certificate add failed, Error: 5
The requested operation requires elevation (Run as administrator).
似乎沒有解決方法,我必須使用管理員帳戶。我也有類似的回覆IIS 論壇上有同樣的問題。
答案2
我有相同的要求,經過多次搜索後很明顯,無論如何都需要管理員權限。
我透過使用自訂帳戶作為身分來建立新的應用程式集區解決了這個問題。
基本上我的伺服器有 2 個使用者。一個管理員和另一個具有相同管理員群組的使用者帳戶。但 user_account 仍然無法透過 IIS 上的程式碼託管任何網站。
- 轉到 IIS
- 然後點擊應用程式集
- 新增的應用程式集區並選擇適當的設置,然後按「確定」。
- 點擊新建立的池並選擇高級屬性
- 前往流程模型部分並點擊 Identity 屬性中的三個點
- 選擇自訂帳戶。
- 輸入管理員(或管理員帳戶的任何名稱)
- 輸入管理員密碼(如果您沒有,請詢問網路負責人或曾經有與此相同的人),然後按“確定”
現在您的網站/Web api 將以管理員帳戶執行。
希望它以任何方式有所幫助