Powershell add certificate binding IIS Vhost tcp 83
Hallo zusammen
Ich benötige eure Hilfe, da ich nicht versiert bin mit Powershell.
Gegeben:
-IIS Webserver
- VHost: "Default Web Site" "Type https" "Hostname fqdn Server" Port 443
- VHost: "Seite1" "Type https" "DNS-Alias" Port 83
Via WinACME wird intern ein Zertifikat für alle Hosts in diesem IIS beantragt und automatisch gebindet überall wo es auf https ist und TCP 443. Leider ist dies bei TCP 83 nicht möglich.
Der Applikationshersteller weigert sich den Port 83 auf 443 zu wechseln.
Hat jemand ein Skript welcher folgendes abdecken würde oder kann mir kurz aushelfen?
1. prüfen im Webhosting Certificatestore ein Zertifikat ist welches auf den Hostnamen Issued ist. Falls mehre sind sich den Hashwert des neusten merkt.
2. Das Binding beim VHost1 das Binding auf dieses Zertifikat macht.
3. Falls kein Binding auf TCP 83 Typ https drin ist dies noch erstellt.
Ich wäre um jede Hilfe dankbar
adminst
Ich benötige eure Hilfe, da ich nicht versiert bin mit Powershell.
Gegeben:
-IIS Webserver
- VHost: "Default Web Site" "Type https" "Hostname fqdn Server" Port 443
- VHost: "Seite1" "Type https" "DNS-Alias" Port 83
Via WinACME wird intern ein Zertifikat für alle Hosts in diesem IIS beantragt und automatisch gebindet überall wo es auf https ist und TCP 443. Leider ist dies bei TCP 83 nicht möglich.
Der Applikationshersteller weigert sich den Port 83 auf 443 zu wechseln.
Hat jemand ein Skript welcher folgendes abdecken würde oder kann mir kurz aushelfen?
1. prüfen im Webhosting Certificatestore ein Zertifikat ist welches auf den Hostnamen Issued ist. Falls mehre sind sich den Hashwert des neusten merkt.
2. Das Binding beim VHost1 das Binding auf dieses Zertifikat macht.
3. Falls kein Binding auf TCP 83 Typ https drin ist dies noch erstellt.
Ich wäre um jede Hilfe dankbar
adminst
Please also mark the comments that contributed to the solution of the article
Content-ID: 668021
Url: https://administrator.de/contentid/668021
Printed on: October 15, 2024 at 03:10 o'clock
19 Comments
Latest comment
# IIS site name
$sitename = "Seite1"
# domain name
$domainname = 'mydomain.tld'
# location of cert
$certlocation = "Cert:\LocalMachine\WebHosting"
# binding
$bindinginfo = '*:83:'
# --------------------------------------------------------
# get certificate
$cert = Get-ChildItem $certlocation | ? DnsNameList -contains $domainname | sort NotAfter -Descending | select -First 1
# if certificate found
if ($cert){
# get certificate binding
$binding = Get-IISSiteBinding -Name $sitename -BindingInformation $bindinginfo -Protocol https -WarningAction SilentlyContinue
# if binding not found
if (!$binding){
# create new binding
write-host "Creating new IIS binding" -F Green
New-IISSiteBinding -Name $sitename -BindingInformation $bindinginfo -Protocol https -CertificateThumbPrint $cert.Thumbprint -CertStorelocation $certlocation
}else{
# binding found compare certificate hash, if not equals to cert thumbprint update re-add binding
if (!$binding.CertificateHash -or [Bitconverter]::ToString($binding.CertificateHash).replace("-","") -ne $cert.Thumbprint){
write-host "Updating IIS binding to new certificate." -f Green
Remove-IISSiteBinding -Name $sitename -BindingInformation $binding.bindingInformation -Protocol https -Confirm:$false
New-IISSiteBinding -Name $sitename -BindingInformation $bindinginfo -Protocol https -CertificateThumbPrint $cert.Thumbprint -CertStorelocation $certlocation
}
}
}
gruß
Das heißt -contains nicht "-container"
RTFM
https://learn.microsoft.com/de-de/powershell/module/microsoft.powershell ...
RTFM
https://learn.microsoft.com/de-de/powershell/module/microsoft.powershell ...
Die IIS Zertifikate sind im Webhosting drin
Weiter unten dann aber auch anpassen ...Im Moment hat der kein Zertifikatsbinding. In diesem Fall wirds auch nicht durch das Skript gebindet.
Doch da hat er, das "SSLFlags" hat nicht mit Certificate Ja/nein zu tun, lass dir alle Eigenschaften anzeigen (format-list *) dann siehst du das das Zertifikat da eingebunden ist ...
Besteht der Eintrag denn schon vorher? Wenn ja von einem "Update" eines bereits bestehenden Eintrags hattest du in deinem Post nichts erwähnt nur was von "Hinzufügen". Habe den Update-Fall aber oben jetzt noch hinzugefügt.
Nur bisschen Kosmetik, setzen tut er es schon, ist aber oben noch ergänzt wenns stört.
"Protocol" beim Entfernen vergessen ist ergänzt, sorry sitze im Zug und der wackelt gewaltig .
p..s. Du Darfst gerne ab und zu auch mal selbst in die Doku schauen damit du auch was von dem ganzen mit nimmst und nicht nur copy n pastest ...
p..s. Du Darfst gerne ab und zu auch mal selbst in die Doku schauen damit du auch was von dem ganzen mit nimmst und nicht nur copy n pastest ...
Klappt hier im Test einwandfrei.
Prüfe mal ob $binding.CertificateHash wirklich $null ist oder nur ein leeres Array.
Prüfe mal ob $binding.CertificateHash wirklich $null ist oder nur ein leeres Array.
Write-Host "$binding.CertificateHash"
Sowas geht ja auch nicht wenn dann sowrite-host "$($binding.CertficateHash)"
$binding.CertficateHash.gettype()
Es wird ja auch nur gebunden wenn der Hash zum Cert aus dem Store anders ist oder leer! Klappt hier wie oben ersichtlich einwandfrei. Fehler liegt nun auf deiner Seite.
Bitte immer leere Konsolen benutzen, keine ISE!
Works as designed, hier mein Test.
Erst extra mal testweise ein https Binding ohne Zertifikat erstellt, dann das Skript angewendet und hinterher wieder abgefragt, ergo Cert wurde erfolgreich eingebunden und mit neuer Bindung hinzugefügt .
Me out, muss jetzt aussteigen sonst fährt mir der Anschluss weg ...🖖
Erst extra mal testweise ein https Binding ohne Zertifikat erstellt, dann das Skript angewendet und hinterher wieder abgefragt, ergo Cert wurde erfolgreich eingebunden und mit neuer Bindung hinzugefügt .
Die Frage warum
Keine cleanen Konsolen verwendet. Der IIS ist da zickig.Me out, muss jetzt aussteigen sonst fährt mir der Anschluss weg ...🖖