Korzystając z Invoke-WebRequest i Invoke-RestMethod programu PowerShell v3, z powodzeniem użyłem metody POST do wysłania pliku json do witryny https.
Polecenie, którego używam, to
$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
Jednak gdy próbuję użyć metody GET, takiej jak:
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Method GET
Zwracany jest następujący błąd
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
Próbowałem użyć następującego kodu, aby zignorować certyfikat SSL, ale nie jestem pewien, czy faktycznie coś robi.
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Czy ktoś może udzielić wskazówek, co może tu być nie tak i jak to naprawić?
Dzięki
.net
rest
powershell
https
floyd
źródło
źródło
Invoke-RestMethod
czyInvoke-WebRequest
?Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
Możesz spróbować zbadać $ Error [0] .Exception.InnerException, aby uzyskać więcej informacji .. ,Odpowiedzi:
To obejście zadziałało dla mnie: http://connect.microsoft.com/PowerShell/feedback/details/419466/new-webserviceproxy-needs-force-parameter-to-ignore-ssl-errors
Zasadniczo w skrypcie PowerShell:
źródło
-SkipCertificateCheck
teraz.Odpowiedź Lee jest świetna, ale miałem też problemy z obsługiwanymi protokołami.
Po dodaniu następujących wierszy mogłem uzyskać żądanie https. Jak wskazano w tej odpowiedzi https://stackoverflow.com/a/36266735
Moje pełne rozwiązanie z kodem Lee.
źródło
SecurityProtocol
globalną właściwość statyczną. Chryste, właśnie straciłem DNI na sprawdzaniu certyfikatów, zaufania, sieci, tras, uprawnień i gówna innych rzeczy, próbując rozwiązać niejasnyendpoint does not respond
błąd podczas uzyskiwania dostępu do jednego konkretnego serwera przez https (wszystkie inne działają), tylko dlatego, że ten cholerny PowerShell 5.1 domyślnie SSL3, TLS i TYLKO BLOKUJE GODDAMN TLS11 i TLS12 DOMYŚLNIE Boże, jak bardzo nienawidzę tego gówna Powinienem był napisać ten skrypt w C # / Ruby / C ++ lub czymkolwiek innym, co nie jest PowerShellCzy próbowałeś użyć
System.Net.WebClient
?źródło
Alternatywna implementacja w czystym powershell(nie
Add-Type
stanowido# źródło):źródło
Poniższe zadziałały dla mnie (i wykorzystują najnowsze, nieaktualne środki do interakcji z SSL Certs / funkcją wywołania zwrotnego) i nie próbują ładować tego samego kodu wiele razy w tej samej sesji PowerShell:
Zostało to zaadaptowane z następującego artykułu: https://d-fens.ch/2013/12/20/nobrainer-ssl-connection-error-when-using-powershell/
źródło
Okazało się, że kiedy użyłem funkcji this callback do zignorowania certyfikatów SSL
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Zawsze otrzymywałem komunikat o błędzie,
Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.
który brzmi jak wyniki, które masz.Znalazłem ten post na forum, który doprowadził mnie do poniższej funkcji. Uruchamiam to raz w zakresie mojego innego kodu i działa dla mnie.
źródło
Możesz użyć parametru -SkipCertificateCheck, aby osiągnąć to jako polecenie jednowierszowe (TEN PARAMETR JEST OBSŁUGIWANY TYLKO NA PODSTAWIE PSEDYCJI)
źródło
Próbowałem poszukać dokumentacji na temat EM7 OpenSource REST API. Na razie nie ma szczęścia.
http://blog.sciencelogic.com/sciencelogic-em7-the-next-generation/05/2011
Dużo się mówi o OpenSource REST API, ale nie ma linku do faktycznego API ani jakiejkolwiek dokumentacji. Może byłem niecierpliwy.
Oto kilka rzeczy, które możesz wypróbować
Spróbuj tego, aby sprawdzić, czy możesz odfiltrować kolumny, które otrzymujesz z interfejsu API
lub możesz spróbować użyć tego również
Nagłówki Curl Style
Przetestowałem IRM / IWR za pomocą Twittera JSON API.
Mam nadzieję że to pomoże.
źródło
New-SelfSignedCertificate -certstorelocation cert: \ localmachine \ my -dnsname {nazwa-twojej-witryny-hosta}
w programie PowerShell przy użyciu praw administratora spowoduje to wygenerowanie wszystkich certyfikatów w katalogu osobistym
Upewnij się, że nazwa hosta witryny i nazwa-dns certyfikatu powinny być dokładnie zgodne
źródło
Te ustawienia rejestru wpływają na .NET Framework 4+, a tym samym na PowerShell. Ustaw je i uruchom ponownie wszystkie sesje programu PowerShell, aby korzystać z najnowszego protokołu TLS, bez konieczności ponownego uruchamiania.
Zobacz https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls#schusestrongcrypto
źródło
Jeśli uruchomisz to jako administrator, ten błąd powinien zniknąć
źródło