Mit Invoke-WebRequest und Invoke-RestMethod von Powershell v3 habe ich die POST-Methode erfolgreich verwendet, um eine JSON-Datei auf einer https-Website zu veröffentlichen.
Der Befehl, den ich benutze, ist
$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("cert.crt")
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Body $json -ContentType application/json -Method POST
Wenn ich jedoch versuche, die GET-Methode wie folgt zu verwenden:
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Method GET
Der folgende Fehler wird zurückgegeben
Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
At line:8 char:11
+ $output = Invoke-RestMethod -Uri https://IPADDRESS/resource -Credential $cred
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Ich habe versucht, den folgenden Code zu verwenden, um das SSL-Zertifikat zu ignorieren, bin mir aber nicht sicher, ob es tatsächlich etwas bewirkt.
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Kann jemand eine Anleitung geben, was hier möglicherweise schief geht und wie man es behebt?
Vielen Dank
.net
rest
powershell
https
Floyd
quelle
quelle
Invoke-RestMethod
oderInvoke-WebRequest
?Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
Sie könnten versuchen, $ Error [0] .Exception.InnerException zu untersuchen, um weitere Informationen zu erhalten. .Antworten:
Diese Problemumgehung hat bei mir funktioniert: http://connect.microsoft.com/PowerShell/feedback/details/419466/new-webserviceproxy-needs-force-parameter-to-ignore-ssl-errors
Grundsätzlich in Ihrem PowerShell-Skript:
quelle
-SkipCertificateCheck
Jetzt.Lees Antwort ist großartig, aber ich hatte auch Probleme mit den vom Webserver unterstützten Protokollen.
Nachdem ich auch die folgenden Zeilen hinzugefügt hatte, konnte ich die https-Anfrage durchstellen. Wie in dieser Antwort ausgeführt, https://stackoverflow.com/a/36266735
Meine vollständige Lösung mit Lees Code.
quelle
SecurityProtocol
globale statische Eigenschaft gezeigt haben. Gott, ich habe gerade TAGE verloren, als ich Zertifikate, Vertrauensstellungen, Netzwerke, Routen, Berechtigungen und eine Menge anderer Dinge überprüft habe, um vageendpoint does not respond
Fehler beim Zugriff auf einen bestimmten Server über https zu lösen (alle anderen funktionieren), nur weil diese verdammte Powershell 5.1 Standardwerte SSL3, TLS und es einfach BLOCKS Hippie - TLS11 und TLS12 Verzugs Gott , wie sehr ich diesen Mist hasse ich geschrieben haben , sollten das Skript in C # / Rubin / C ++, oder was sonst auch immer , die nicht Powershell istHast du es versucht
System.Net.WebClient
?quelle
Eine alternative Implementierung in rein Power Shell(ohne
Add-Type
vonc # Quelle):quelle
Das Folgende hat bei mir funktioniert (und verwendet die neuesten nicht veralteten Mittel, um mit der SSL-Zertifikat- / Rückruffunktion zu interagieren) und versucht nicht, denselben Code mehrmals in derselben Powershell-Sitzung zu laden:
Dies wurde aus dem folgenden Artikel angepasst: https://d-fens.ch/2013/12/20/nobrainer-ssl-connection-error-when-using-powershell/
quelle
Ich fand das, als ich diese Rückruffunktion verwendete, um SSL-Zertifikate zu ignorieren
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Ich habe immer die Fehlermeldung erhalten,
Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.
die nach den Ergebnissen klingt, die Sie haben.Ich habe diesen Forumsbeitrag gefunden, der mich zu der folgenden Funktion führte. Ich führe dies einmal im Rahmen meines anderen Codes aus und es funktioniert für mich.
quelle
Ich habe versucht, nach Dokumentation für die EM7 OpenSource REST-API zu suchen. Bisher kein Glück.
http://blog.sciencelogic.com/sciencelogic-em7-the-next-generation/05/2011
Es wird viel über die OpenSource REST-API gesprochen, aber kein Link zur eigentlichen API oder Dokumentation. Vielleicht war ich ungeduldig.
Hier sind einige Dinge, die Sie ausprobieren können
Versuchen Sie dies, um festzustellen, ob Sie die Spalten herausfiltern können, die Sie von der API erhalten
oder Sie können dies auch versuchen
Curl Style Header
Ich habe das IRM / IWR mit der Twitter JSON API getestet.
Hoffe das hilft.
quelle
Sie können den Parameter -SkipCertificateCheck verwenden , um dies als einzeiligen Befehl zu erreichen (DIESER PARAMETER WIRD NUR AUF KERN-PSEDITION UNTERSTÜTZT).
quelle
New-SelfSignedCertificate -certstorelocation-Zertifikat: \ localmachine \ my -dnsname {your-site-hostname}
In Powershell mit Administratorrechten werden alle Zertifikate im persönlichen Verzeichnis generiert
Stellen Sie sicher, dass der Hostname der Website und der DNS-Name des Zertifikats genau übereinstimmen
quelle
Diese Registrierungseinstellungen wirken sich auf .NET Framework 4+ und damit auf PowerShell aus. Legen Sie sie fest und starten Sie alle PowerShell-Sitzungen neu, um das neueste TLS zu verwenden. Ein Neustart ist nicht erforderlich.
Siehe https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls#schusestrongcrypto
quelle
Wenn Sie dies als Administrator ausführen, sollte dieser Fehler behoben sein
quelle