Ssl

為 IIS HTTPS 綁定配置 SSL 證書的使用者權限

  • May 14, 2019

我有一個為網站配置 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 介面的包裝器,但我不確定。

我嘗試使用 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 個使用者。一個管理員和其他具有相同管理員組的使用者帳戶。但是 user_account 仍然無法通過 IIS 上的程式碼託管任何站點。

  1. 轉到 IIS
  2. 然後點擊應用程序池
  3. 添加新的應用程序池並選擇適當的設置,然後按確定。
  4. 點擊新創建的池並選擇高級屬性
  5. 轉到流程模型部分並點擊身份屬性中的三個點
  6. 選擇自定義帳戶。
  7. 輸入管理員(或管理員帳戶的任何名稱)
  8. 輸入管理員密碼(如果您沒有然後詢問網路負責人或誰曾經有過與此相同的密碼),然後按 OK

現在您的站點/web api 將作為管理員帳戶執行。

希望它以任何方式有所幫助

引用自:https://serverfault.com/questions/901865