Powershell kullanarak bir IIS sitesine bağlama ekleme


19

Powershell kullanarak bir IIS uygulamasında bağlamaları kontrol etmeye çalışıyorum. Komut dosyası kullanarak hem http hem de https bağlaması olan bir site oluşturmak istiyorum.

Şimdiye kadar sahip olduğum şey bu:

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

Değişkeme nasıl bağlama ekleyebilirim / hedefime $bindingsulaşmak için başka bir mekanizma kullanabilirim?

Yanıtlar:


24

New-WebBinding'ı kullanabilirsiniz: http://technet.microsoft.com/en-us/library/ee790567.aspx

Örneğin

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

Bu teorik olarak soruyu cevaplayabilse de , cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
Mark Henderson

Technet makalesinin altından daha iyi bir örnek bulacağımı düşünüyor musunuz?
MatthewP

15
Hayır, ancak belki de ilgili olan Technet makalesinin bir bölümünü almalı ve burada bir alıntı bloğunda çoğaltmalısınız. Yeterli olması gereken bir şeyde düzenledim.
Mark Henderson

Bunun etkili olması için IIS'nin yeniden başlatılması gerekiyor mu?
Krunal

10

Bir siteye https bağlaması eklemeye çalıştım ve oldukça acı verici olabilir. Her adımı gerçekleştirmenin birçok yolu vardır ve her birinin tuzakları vardır. Birinin yararlı bulacağını ümit ederek nihai çözümü geride bırakıyorum.

Bu çözüm, IIS'nin yüklü olduğunu ve bir web sitesinin tanımlandığını varsayar. Bu yazının amaçları için sample.contoso.com sitesini arayın. Kullanmak istediğiniz sample.contoso.com.pfx dosyasında bir sertifikanız olduğunu varsayalım.

İlk adım sertifikayı dosyadan içe aktarmaktır.

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

Bu yeterli olsaydı iyi olurdu. Ve bazı durumlarda olabilir. Ancak, benim için bu, özel anahtara düzgün erişim olmadan sertifikayı bıraktı. Bu, bağlayıcıya sertifika eklemeye gittiğimde "Belirtilen oturum açma oturumu yok. Zaten sonlandırılmış olabilir" hatasına neden oldu (bu adıma daha sonra bakın). Bir sonraki adım, özel anahtar için ACL'yi düzeltmektir.

$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

Bu, yerel sistemin, içerdiği klasörden devralınmamışsa özel anahtara tam erişimine izin verir.

Önceden yüklenmiş bir sertifika almak istiyorsanız, bunun için karmaya ihtiyacınız vardır ve aşağıdaki gibi Get-Item ile alabilirsiniz:

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

Bir sonraki adım, bağlayıcı oluşturmaktır.

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

"Https" nin büyük / küçük harfe duyarlı olduğunu belirtmek önemlidir. Bunun yerine "HTTPS" kullanırsanız, gerçekten farklı bir bağlama sonucu elde edersiniz.

Bu bağlamanın henüz ekli bir sertifikası yok, bu nedenle son adım sertifikayı eklemektir. Sertifika düzgün bir şekilde güvenilirse ve güvenlik doğruysa, bu adım başarılı olmalıdır. Yine de sertifika ile ilgili herhangi bir sorun varsa titiz olabilir.

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

Oturum açma oturumu hakkında bir ileti yoksa bu başarısız olursa, sertifikada bazı sorunlar olabilir. Daha fazla ayrıntı için olay görüntüleyiciyi inceleyin. Çabalarım sırasında, güvenlik günlüğünde 5061 olayını buldum. Başarısız olduğunda, OpenKey'nin 80090016 (Anahtar Seti Var Değil) ile başarısız olduğunu gösterdi. Ve başarısızlık, SYSTEM'in özel anahtara erişememesiydi.

Bu, https bağlayıcısını oluşturmak için yeterliydi. Http bağlama, New-WebSite cmdlet'inin bir yan ürünüdür. Ücretsiz olarak gelmezse, 80 numaralı bağlantı noktasını New-WebBinding cmdlet'i ile bağlamayı bir zorluk olarak oluşturmayı bulamadım.


1
Bu cevabı takdir ettim, ancak daha kolay bir rota var gibi görünüyor @ stackoverflow.com/questions/32390097/… .
Peter Majeed

1
AddSslCertificate çağrısının yeni öğe sözdiziminden daha hoş olduğunu kabul ediyorum ve değiştirdim. Bu işlem sırasında yaşadığım hayal kırıklığı, aldığım hata mesajları ve onları bir google araması kullanarak bir çözünürlükle ilişkilendiremememdi. Yani, geri kalan kelimeler bu süreci gelecekte veya başka biri için kolaylaştırmakla ilgilidir.
Prof Von Lemongargle

4

Bence peşinde olduğun şey şudur:

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

Temel olarak bir dizi bağlantıyı geçmeniz gerekiyor. Daha fazla faydalı bilgi burada - ( http://blogs.iis.net/jeonghwan/iis-powershell-user-guide-comparing-representative-iis-ui-tasks )

(Düzenle: Dizi sözdizimindeki yazım hatası düzeltildi - yabancı virgül)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.