Разрешения пользователя на настройку SSL-сертификата для привязки IIS HTTPS

Разрешения пользователя на настройку SSL-сертификата для привязки IIS HTTPS

У меня есть инструмент конфигурации, который настраивает сертификат IIS SSL для веб-сайта. Он создает новую привязку в конфигурации IIS для "Default Web Site", а затем назначает ему сертификат SSL. Инструмент работает нормально, когда я запускаю его от имени учетной записи администратора, но дает сбой при запуске под учетной записью обычного пользователя с ошибкой "access denied".

Вот код инструмента:

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 с той же группой администраторов. Но все равно user_account не мог разместить ни одного сайта через код на IIS.

  1. Перейти к ИИС
  2. Затем нажмите «Пул приложений».
  3. Добавьте новый пул приложений, выберите соответствующие настройки и нажмите ОК.
  4. Нажмите на недавно созданный пул и выберите «Расширить свойство».
  5. Перейдите в раздел модели процесса и нажмите на три точки в свойстве Identity.
  6. Выберите Пользовательскую учетную запись.
  7. Введите Администратор (или любое другое имя для учетной записи администратора)
  8. Введите пароль администратора (если у вас его нет, спросите у руководителя сети или у кого-либо, кто его знает, так как это делается только один раз) и нажмите OK.

Теперь ваш сайт/веб-API будет работать от имени учетной записи администратора.

Надеюсь, это хоть как-то поможет.

Связанный контент