Bei Powershell SSL/TLS-Zertifikate-Prüfung einfach ignorieren


Da alle Welt mittlerweile nach SSL/TLS-Transportverschlüsselung schreit, um die gröbsten Manipulationsmöglichkeiten während einer Datenübertragung, auszuschließen, bekommt man ein Problem, wenn man mal aus der Hüfte etwas ausprobieren möchte.

Aktueller Fall: Ein Web-Dienst soll kurz abgefragt werden um zu sehen, wie er reagiert. Aus Sicherheitsgründen ist dieser Dienst aber nur per HTTPS verfügbar, was zu folgendem Problem führt:

PS> Invoke-WebRequest -Uri "https://192.168.20.77:8802/cgi-bin/gadgetapi?cmd=Login&gsUser=14&gsPass=0815"
Invoke-WebRequest : Die zugrunde liegende Verbindung wurde geschlossen: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden..
In Zeile:1 Zeichen:1
+ Invoke-WebRequest -Uri "https://192.168.20.77:8802/cgi-bin/gadgetapi?cmd=Login&g
+ …~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
 

Eine simple und schnelle Lösung ist das Ausführen dieses Befehls:

add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

Danach ist der angefragte Server zufrieden und liefert das gewünschte Ergebnis:

PS> Invoke-WebRequest -Uri "https://192.168.20.77:8802/cgi-bin/gadgetapi?cmd=Login&gsUser=14&gsPass=0815"
Invoke-WebRequest : Der Remoteserver hat einen Fehler zurückgegeben: (403) Unzulässig.
In Zeile:1 Zeichen:1
+ Invoke-WebRequest -Uri "https://192.168.20.77:8802/cgi-bin/gadgetapi?cmd=Login&g
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
 

OK, 403 ist nicht optimal aber es ging nur darum einen korrekten HTTP-Statuscode zu bekommen!

Weitere Infos zu Powershell und SSL/TLS-Zertifikate und wie man bei Problemen weitere Infos erhält, findet man hier: https://newyear2006.wordpress.com/2014/01/04/ssltls-fehler-in-powershell-bzw-wie-man-zertifikatsprobleme-unter-windows-analysieren-kann/

3 Antworten to “Bei Powershell SSL/TLS-Zertifikate-Prüfung einfach ignorieren”

  1. Quirel Says:

    Geht übrigens noch einfacher, mittels:

    [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

  2. Quirel Says:

    obiges funktioniert nicht immer, hier eine Library die hilft und mehr zum Thema erklärt: https://github.com/elovelan/Tunable-SSL-Validator

  3. Wichtige Unterschiede zwischen Powershell 5.1 und Powershell Core 6.x bei Invoke-WebRequest und Invoke-RestMethod | Das nie endende Chaos! Says:

    […] Diese Methode hatte früher hier z. B. Anwendung gefunden: https://newyear2006.wordpress.com/2014/07/26/bei-powershell-ssltls-zertifikate-prfung-einfach-ignori…. Eine mögliche Lösung ist allerdings Artikel 3 der Serie bei Parameter –SkipCertificateCheck […]

Hinterlasse einen Kommentar