powershell을 사용하여 IIS 사이트에 바인딩 추가


19

powershell을 사용하여 IIS 앱에서 바인딩을 제어하려고합니다. 스크립트를 사용하여 http 및 https 바인딩을 모두 사용하여 사이트를 만들고 싶습니다.

이것이 내가 지금까지 한 것입니다.

Param(
    [Parameter(Mandatory=$True,Position=1)]
    [string]$hostname,
    [Parameter(Mandatory=$True,Position=2)]
    [string]$installPath,
    [Parameter(Mandatory=$False,Position=3)]
    [string]$ip
)

Import-Module WebAdministration

$appPoolName =  $hostname + 'Pool'

$port = 80
$hostRecord = $hostname+'.example.com'

$bindings = @{protocol="http";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord}

New-Item IIS:\AppPools\$appPoolName
Set-ItemProperty IIS:\AppPools\$appPoolName managedRuntimeVersion v4.0

New-Item IIS:\Sites\$hostname -Bindings $bindings -PhysicalPath $installPath
Set-ItemProperty IIS:\Sites\$hostname -Name applicationPool -Value $appPoolName

$bindings변수 에 바인딩을 추가 하고 목표를 달성하기 위해 다른 메커니즘을 어떻게 사용합니까?

답변:


24

New-WebBinding을 사용할 수 있습니다 : http://technet.microsoft.com/en-us/library/ee790567.aspx

예 :

IIS:\>New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 80 -HostHeader TestSite

이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Mark Henderson

당신은 내가 technet 기사의 맨 아래에서보다 더 나은 예를 생각 해낼 것이라고 생각합니까?
MatthewP

15
아니요, 그러나 관련 기술 문서의 일부를 인용 블록으로 여기에 재현해야합니다. 충분한 것으로 편집했습니다.
Mark Henderson

적용하려면 IIS를 다시 시작해야합니까?
Krunal

10

사이트에 https 바인딩을 추가하는 과정을 거쳤으며 꽤 고통 스럽습니다. 각 단계를 수행하는 방법에는 여러 가지가 있으며 각 단계에는 함정이 있습니다. 누군가가 유용하다고 생각하기 때문에 최종 솔루션을 남겨두고 있습니다.

이 솔루션은 IIS가 설치되어 있고 웹 사이트가 정의되어 있다고 가정합니다. 이 게시물의 목적을 위해 사이트 sample.contoso.com에 전화하십시오. sample.contoso.com.pfx 파일에 사용하려는 인증서가 있다고 가정하십시오.

첫 번째 단계는 파일에서 인증서를 가져 오는 것입니다.

$certPwd = ConvertTo-SecureString -String "password" -Force -AsPlainText
$webServerCert = Import-PfxCertificate -FilePath c:\some\folder\sample.contoso.com.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $certPwd

충분하다면 좋을 것입니다. 그리고 어떤 경우에는 그럴 수도 있습니다. 그러나 나에게 이것은 개인 키에 대한 적절한 액세스없이 인증서를 남겼습니다. 바인딩에 인증서를 추가하려고 할 때 "지정된 로그온 세션이 없습니다. 이미 종료되었을 수 있습니다"라는 powershell 오류가 발생했습니다 (나중에 해당 단계 참조). 따라서 다음 단계는 개인 키의 ACL을 수정하는 것입니다.

$privateKeyFilename = $webServerCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$privateKeyFullPath = "c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\"+$privateKeyFilename
$aclRule = "SYSTEM", "Full", "Allow"
$aclEntry = New-Object System.Security.AccessControl.FileSystemAccessRule $aclRule
$privateKeyAcl = (Get-Item $privateKeyFullPath).GetAccessControl("Access")
$privateKeyAcl.AddAccessRule($aclEntry)
Set-Acl $privateKeyFullPath $privateKeyAcl

이렇게하면 포함 폴더에서 개인 키가 상속되지 않은 경우 로컬 시스템이 개인 키에 완전히 액세스 할 수 있습니다.

이미 설치된 인증서를 얻으려면 해시가 필요하며 다음과 같이 Get-Item을 사용하여 인증서를 검색 할 수 있습니다.

$webServerCert = get-item Cert:\LocalMachine\My\XFX2DX02779XFD1F6F4X8435A5X26ED2X8DEFX95

다음 단계는 바인딩을 만드는 것입니다.

New-WebBinding -Name sample.contoso.com -IPAddress * -Port 443 -Protocol "https"

"https"는 대소 문자를 구분합니다. 대신 "HTTPS"를 사용하면 실제로 다른 바인딩 결과를 얻을 수 있습니다.

이 바인딩에는 아직 인증서가 첨부되어 있지 않으므로 마지막 단계는 인증서를 첨부하는 것입니다. 인증서가 올바르게 신뢰되고 보안이 올바른 경우이 단계는 성공해야합니다. 인증서에 문제가 있으면 까다로울 수 있습니다.

$bind = Get-WebBinding -Name $webSiteDNSName -Protocol https
$bind.AddSslCertificate($webServerCert.GetCertHashString(), "my")

로그온 세션이 존재하지 않는다는 메시지가 표시되지 않으면 인증서에 문제가있을 수 있습니다. 자세한 내용은 이벤트 뷰어를 검토하십시오. 노력하는 동안 보안 로그에서 이벤트 5061이 발견되었습니다. 실패하면 80090016 (키셋이 존재하지 않음)으로 OpenKey가 실패했음을 나타냅니다. 그리고 SYSTEM이 개인 키에 액세스 할 수 없었기 때문에 실패했습니다.

그것은 https 바인딩을 만들기에 충분했습니다. http 바인딩은 New-WebSite cmdlet 사용의 부산물이었습니다. 무료로 제공되지 않으면 New-WebBinding cmdlet을 사용하여 포트 80 바인딩을 만드는 것이 쉽지 않습니다.


1
이 답변에 감사 드리지만 @ stackoverflow.com/questions/32390097/… 더 쉬운 경로가있는 것 같습니다 .
피터 마 제드

1
AddSslCertificate 호출이 새 항목 구문보다 더 만족스럽고 교체했습니다. 이 작업을 수행 할 때의 좌절은 내가 얻은 오류 메시지와 Google 검색을 사용하여 다시 해상도와 관련시킬 수 없다는 사실이었습니다. 따라서 나머지 단어는 향후 또는 다른 사람을 위해 해당 프로세스를 완화하는 것과 관련이 있습니다.
Von Lemongargle 교수님

4

나는 당신이 겪고있는 것이 다음과 같다고 생각합니다.

$bindings = @(
   @{protocol="http";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord},
   @{protocol="https";bindingInformation=$ip + ":"+ $port + ":" + $hostRecord}
)

기본적으로 일련의 바인딩을 전달해야합니다. 더 유용한 정보는 여기-( http://blogs.iis.net/jeonghwan/iis-powershell-user-guide-comparing-representative-iis-ui-tasks )

(편집 : 배열 구문의 오타 수정-불필요한 쉼표)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.