Permissões de usuário para configurar o certificado SSL para ligação HTTPS do IIS

1

Eu tenho uma ferramenta de configuração que configura o certificado SSL do IIS para um site. Ele cria uma nova ligação na configuração do IIS para "Site padrão" e, em seguida, atribui um certificado SSL a ele. A ferramenta funciona bem quando eu executá-lo em nome da conta administrativa, mas falha ao executar sob a conta de usuário regular com erro "acesso negado".

Aqui está o código da ferramenta:

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();
        }
    }
}

Aqui está o erro que estou recebendo quando eu o executo como usuário:

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()

Eu adicionei controle total sobre as seguintes pastas:

  • "C: \ Windows \ System32 \ inetsrv \ config"
  • "C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys"
  • "C: \ inetpub \ wwwroot"

Eu também tentei o seguinte link, mas não ajudou:

Existe alguma outra configuração ou política de segurança que eu preciso conceder ao meu usuário?

Alguns detalhes adicionais: Eu verifiquei se há alguma coisa que pode exigir permissões no ProcessMonitor, mas não encontrei nenhuma chave de registro nem arquivos com "ACCESS DENIED". Havia apenas uma chave de registro, que acrescentei, mas não faz diferença: HKLM \ System \ CurrentControlSet \ Services \ WinSock2 \ Parâmetros.

Além disso, é possível adicionar uma nova ligação sem certificado, mas quando eu especificar o hash do certificado, ele falhará. É como se alguma política não me permitisse executar o código, provavelmente algo relacionado ao COM, uma vez que o Microsoft.Web.Administration é um wrapper sobre interfaces COM, mas não tenho certeza.

    
por username 15.03.2018 / 18:09

1 resposta

1

Eu tentei executar a mesma operação com o 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).

Parece que não há solução alternativa para isso e devo usar a conta de administrador. Eu também tenho um parecido response para a mesma pergunta no fórum do IIS.

    
por 02.04.2018 / 12:25