IIS HTTPS 바인딩을 위한 SSL 인증서를 구성하기 위한 사용자 권한

IIS HTTPS 바인딩을 위한 SSL 인증서를 구성하기 위한 사용자 권한

웹 사이트에 대한 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와 같이 아무런 차이가 없습니다.

또한 인증서 없이 새 바인딩을 추가할 수도 있지만 인증서 해시를 지정하면 실패합니다. Microsoft.Web.Administration은 COM 인터페이스에 대한 래퍼이기 때문에 일부 정책에서 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

나는 동일한 요구 사항을 가지고 있었고 여러 번 검색한 후에 어떤 경우에도 관리자 권한이 필요하다는 것이 분명해졌습니다.

사용자 지정 계정을 ID로 사용하여 새 애플리케이션 풀을 생성하여 이 문제를 해결했습니다.

기본적으로 내 서버에는 2명의 사용자가 있었습니다. 하나의 관리자와 동일한 관리자 그룹을 가진 다른 user_account. 그러나 여전히 user_account는 IIS의 코드를 통해 사이트를 호스팅할 수 없습니다.

  1. IIS로 이동
  2. 그런 다음 응용 프로그램 풀을 클릭하십시오.
  3. 새 애플리케이션 풀을 추가하고 적절한 설정을 선택한 후 확인을 누르세요.
  4. 새로 생성된 풀을 클릭하고 고급 속성을 선택합니다.
  5. 프로세스 모델 섹션으로 이동하여 ID 속성에서 세 개의 점을 클릭합니다.
  6. 사용자 정의 계정을 선택합니다.
  7. 관리자(또는 관리자 계정의 이름)를 입력하세요.
  8. 관리자 비밀번호를 입력하고(없으면 네트워크 헤드나 누구에게 같은 비밀번호를 물어본 적이 있는지 한 번만 물어보세요) 확인을 누릅니다.

이제 귀하의 사이트/웹 API가 관리자 계정으로 실행됩니다.

어떤 식으로든 도움이 되길 바랍니다

관련 정보