Ich versuche, Bindungen in einer IIS-App mithilfe von Powershell zu steuern. Ich möchte eine Site mit einer http- und einer https-Bindung mithilfe eines Skripts erstellen.
Das habe ich bisher:
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
Wie füge ich meiner $bindings
Variablen Bindungen hinzu / verwende einen anderen Mechanismus, um mein Ziel zu erreichen?
powershell
Khanzor
quelle
quelle
Ich habe versucht, eine https-Bindung zu einer Site hinzuzufügen, was ziemlich schmerzhaft sein kann. Es gibt viele Möglichkeiten, um jeden Schritt auszuführen, und jeder hat Fallstricke. Ich lasse die endgültige Lösung hinter mir und hoffe, dass jemand sie nützlich findet.
Diese Lösung setzt voraus, dass Sie IIS installiert und eine Website definiert haben. Rufen Sie die Site sample.contoso.com für die Zwecke dieses Beitrags auf. Angenommen, Sie haben ein Zertifikat in einer sample.contoso.com.pfx-Datei, das Sie ebenfalls verwenden möchten.
Der erste Schritt besteht darin, das Zertifikat aus der Datei zu importieren.
Es wäre schön, wenn das ausreichen würde. Und in einigen Fällen kann es sein. Für mich blieb das Zertifikat jedoch ohne ordnungsgemäßen Zugriff auf den privaten Schlüssel. Dies verursachte einen Powershell-Fehler "Eine angegebene Anmeldesitzung existiert nicht. Möglicherweise wurde sie bereits beendet", als ich das Zertifikat zur Bindung hinzufügte (siehe diesen Schritt später). Der nächste Schritt besteht also darin, die ACL für den privaten Schlüssel zu reparieren.
Auf diese Weise kann das lokale System uneingeschränkt auf den privaten Schlüssel zugreifen, wenn dieser nicht vom übergeordneten Ordner geerbt wird.
Wenn Sie ein Zertifikat erhalten möchten, das bereits installiert ist, benötigen Sie den Hash dafür und können ihn mit Get-Item wie folgt abrufen:
Der nächste Schritt besteht darin, die Bindung zu erstellen.
Es ist wichtig zu beachten, dass "https" zwischen Groß- und Kleinschreibung unterscheidet. Wenn Sie stattdessen "HTTPS" verwenden, erhalten Sie ein wirklich anderes Bindungsergebnis.
An diese Bindung ist noch kein Zertifikat angehängt. Der letzte Schritt ist das Anhängen des Zertifikats. Wenn das Zertifikat ordnungsgemäß als vertrauenswürdig eingestuft ist und die Sicherheit korrekt ist, sollte dieser Schritt erfolgreich sein. Es kann jedoch schwierig sein, wenn ein Problem mit dem Zertifikat vorliegt.
Wenn dies mit der Meldung fehlschlägt, dass keine Anmeldesitzung vorhanden ist, liegt möglicherweise ein Problem mit dem Zertifikat vor. Überprüfen Sie die Ereignisanzeige auf weitere Details. Während meiner Bemühungen fand ich Ereignis 5061 im Sicherheitsprotokoll. Wenn es fehlschlug, zeigte es, dass OpenKey mit 80090016 fehlschlug (das Keyset existiert nicht). Der Fehler war, dass SYSTEM keinen Zugriff auf den privaten Schlüssel hatte.
Das hat mir ausgereicht, um die https-Bindung zu erstellen. Die http-Bindung war ein Nebenprodukt der Verwendung des Cmdlets New-WebSite. Wenn dies nicht kostenlos ist, empfand ich das Erstellen der Port 80-Bindung mit dem Cmdlet New-WebBinding nicht als Herausforderung.
quelle
Ich denke, was Sie suchen, ist Folgendes:
Grundsätzlich müssen Sie eine Reihe von Bindungen übergeben. Weitere hilfreiche Informationen finden Sie hier ( http://blogs.iis.net/jeonghwan/iis-powershell-user-guide-comparing-representative-iis-ui-tasks ).
(Edit: Tippfehler in der Array-Syntax behoben - Fremdkomma)
quelle