Назад | Перейти на главную страницу

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

У меня есть инструмент настройки, который настраивает сертификат 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()

Я добавил полный контроль над следующими папками:

Я также попробовал следующую ссылку, но это не помогло: 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 с той же группой администраторов. Но все же user_account не смог разместить какой-либо сайт через код в IIS.

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

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

Надеюсь, это поможет в любом случае