2014-10-21 2 views
8

현재 새 자동화 된 배포를 설정 중이며 프로그래밍 방식으로 IIS 8에서 사용할 수있는 SNI로 https 바인딩을 등록하는 방법을 알고 싶습니다. 웹 사이트가 이미 있고 SSL 인증서가 이미 설치되어 있습니다. IIS 8에서 사용할 수있는 SNI (https 바인딩) 등록 (PowerShell 스크립트 포함)

는 SSL 인증서가 이미 설치되어 있다고 가정 바인딩

  • SSL 인증서 지문
  • 도메인

    • 웹 사이트 이름 :

      파워 쉘 스크립트에 전달 된 다음과 같은 매개 변수가 있습니다.

      아무도 도와 줄 수 있습니까? 인증서가 누락되어 있지만 바인딩 allready있는 경우

  • 답변

    13

    경우 인증서가 이미 설치되어 말과 응용 프로그램 풀 ID는 다음을 개인 키에 권한이로

    New-WebBinding -Name $WebsiteName -Protocol "https" -Port 443 -IPAddress $IPAddress -HostHeader $HostHeader -SslFlags $sslFlags 
    

    물론이 코드를 실행하기 전에 변수를 설정해야합니다. 이것들은 자명하다.

    은이는 다음 표에 따라 설정해야합니다 $ sslFlags 변수의 값 설정 : 당신이 중앙 인증서 저장소를 사용하지 않기 때문에이 1로 설정해야합니다 귀하의 경우에는

    0 No SNI 
    1 SNI Enabled 
    2 Non SNI binding which uses Central Certificate Store. 
    3 SNI binding which uses Central Certificate store 
    

    합니다.

    일단 SSL 바인딩을 얻은 후에는 바인딩을 올바른 인증서와 연결해야합니다. 경험을 통해이 작업을 수행하는 가장 쉬운 방법은 netsh.exe 명령을 사용하는 것입니다. Powershell을 직접 사용해도되지만 여러 시간 동안 조사하고 다른 문제를 해결 한 후에도 훨씬 안정적인 netsh를 발견했습니다.

    여기서 구문은 바인딩을 설정하는 방법에 따라 다르지만 SNI를 사용하는 경우 다음 구문이 필요합니다. (appid는 걱정하지 마세요. 값이 무엇이든간에 중요하지 않습니다)

    netsh http add sslcert hostnameport=$($HostHeader):$($Port) certhash=$Thumbprint appid='{4dc3e181-e14b-4a21-b022-59fc669b0914}' certstorename=MY 
    

    또한이 코드에는 변수를 설정해야합니다. 호스트 헤더는 웹 사이트가 바인딩 된 DNS 이름이어야하며 포트는 443 일 가능성이 높으며 $ Thumbprint 변수에는 사용하려는 인증서의 지문 또는 해시가 있어야합니다.이 코드에서와 같이 인증서 공급자를 사용하여 찾을 수 있습니다.

    $Thumbprint = (Get-ChildItem -Path cert:\LocalMachine\My | Where-Object {$_.GetNameInfo("SimpleName",$false) -eq "my cert common name"}).Thumbprint 
    

    더 많은 도움이 필요하면 질문을 업데이트하십시오. 나는이 분야에서 많은 일을 해왔다.

    0

    (귀하의 사이트가 포트 443을 사용 가정) :

    cd IIS:\sslbindings 
    get-item cert:\certpath\$thumbprint | new-item 0.0.0.0!443 
    

    당신이 모듈 webadministration을 가져올 수있는 IIS PS-드라이브에 액세스 할 수 있습니다.

    아직 존재하지 않는 바인딩 경우에 당신은

    New-WebBinding -Name $siteName -IP "*" -Port 443 -Protocol https 
    

    감사로를 만들 수 있습니다

    3

    Netsh를 사용하지 않으려면 Powershell을 사용하는 경우에만 "서버 이름 표시 필요" 플래그가 설정된 SNI 바인딩을 추가 할 수 있습니다. 이 사람을 도움이

    # Parameters: 
    $WebsiteName = "Your Site Name" # this is the Sites name as displayed in IIS Manager 
    $port = 443 # SSL Port, when using SNI most likely the default port 443 
    $hostHeader = "www.example.com" # the domain/host-header this binding should listen for 
    $thumbprint = "AAABBBCCCDDDEEEFFF000111222333444555666" # the certificate thumbprint 
    # Commands: 
    New-Item -Path "IIS:\SslBindings\!$port!$hostHeader" -Thumbprint $thumbprint -SSLFlags 1 
    New-WebBinding -Name $WebsiteName -Protocol "https" -Port $port -HostHeader $hostHeader -SslFlags 1 
    

    희망 :

    여기에 내가 IIS8에 대한 찾을 수있는 가장 간단한 방법입니다! :-)

    +1

    (미등록)'-SSLFlags 1'에서'새로운 품목의 양보다 더 잘 작동하는 것 같은 SSL을 추가 할 수있는 바인딩 개체의 방법이 실제로있다 'IP 주소를 생략하면 나에게 트릭이 생겼다. 고마워요, 많은 도움이되었습니다! –

    1

    위의 옵션

    $Name = '' 
    $IP = '' 
    $HostHeader = '' 
    
    #ymmv here. if host header doesnt match subject name you need to adjust how you're getting the cert 
    $Cert = (gci cert:\LocalMachine\My) | ? { (($_.Subject | SLS '^(?:CN=)(.*?)(?=,)').matches.groups.value[-1]) -eq $HostHeader} 
    
    New-WebBinding -Name $Name -Protocol 'https' -Port 443 -IPAddress $IP -HostHeader $HostHeader -SslFlags 1 
    $NewBinding = get-webbinding -hostheader $HostHeader -protocol https 
    $NewBinding.AddSSLCertificate("$($cert.getcerthashstring())","MY")