사이트에 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 바인딩을 만드는 것이 쉽지 않습니다.