Unexpected error occurred running a simple unauthorized Rest query
Solution 1
Using:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Taken from Powershell 3.0 Invoke-WebRequest HTTPS Fails on All Requests.
Solution 2
in my case the TLS trick did not work, this seems to be a bug in powershell. you need to add the callback using .net code instead of a scriptblock.
#C# class to create callback
$code = @"
public class SSLHandler
{
public static System.Net.Security.RemoteCertificateValidationCallback GetSSLHandler()
{
return new System.Net.Security.RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; });
}
}
"@
#compile the class
Add-Type -TypeDefinition $code
#disable checks using new class
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = [SSLHandler]::GetSSLHandler()
#do the request
try
{
invoke-WebRequest -Uri myurl -UseBasicParsing
} catch {
# do something
} finally {
#enable checks again
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = $null
}
Solution 3
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
Works in Windows server 2016
Major Minor Build Revision
5 1 17763 1007
dross
Updated on July 09, 2022Comments
-
dross almost 2 years
I have a rest endpoint that doesn't perform an authentication check. I can run a simple curl commmand from Linux:
curl -k https://application/api/about
This responds.
However if try the following on PowerShell it fails:
Invoke-RestMethod https://application/api/about
Then I get:
Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send. At line:1 char:1 + Invoke-RestMethod $Application + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Could some one please tell me how I can get around this problem ?
EDIT:
Trying with Invoke-WebRequest:
Invoke-WebRequest -Uri "https://application/api/about"
Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send. At line:1 char:1 + Invoke-WebRequest -Uri "https://application/api/a ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
-
Jose Ortega over 5 yearsThank you! This was exactly what I needed
-
qJake over 5 yearsThis is gold! Worked like a charm.
-
Glenn Ferrie about 5 yearsunbelievable 15K views... 48 up votes. thanks for the info.
-
Andy Arismendi about 5 yearsThis worked for me while setting
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
and[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
didn't. -
aaaaaa about 5 yearsHow did you know to set this value? I just want to know how we were all supposed to figure this out
-
Mark Schultheiss about 5 years@aaaaaa - we figured it out by searching StackOverflow :) and found this answer
-
MonaLisaOverdrive almost 5 years@justin I do not understand why this worked, but it did. Is it a powershell version issue?
-
Justin almost 5 years@AndyArismendi using {$true} does work, but you can get yourself into trouble if there are too many calls to https. that is why you need a compiled class.
-
Justin almost 5 years@MonaLisaOverdrive as far as i can tell it is a powershell issue, basically it keeps reloading the powershell runspace and eventually reaches a point where it can't.
-
ArNumb over 4 yearsThis setting is to be done during each PowerShell session. It works like a charm, thanks!
-
Dan Buhler almost 4 yearsIf you get a 'not recognized' error, I used
[Net.ServicePointManager]::SecurityProtocol = 'Tls12'
to accomplish the same thing.