web-dev-qa-db-ja.com

単純な無許可のRESTクエリの実行中に予期しないエラーが発生しました

認証チェックを実行しない残りのエンドポイントがあります。 Linuxから簡単なcurlコマンドを実行できます。

curl -k https://application/api/about

これは応答します。

ただし、PowerShellで次を試すと失敗します。

Invoke-RestMethod https://application/api/about

その後、私は得る:

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

この問題を回避する方法を教えてください。

編集:

Invoke-WebRequestで試す:

Invoke-WebRequest -Uri "https://application/api/about"

Invoke-WebRequest:基になる接続が閉じられました:送信時に予期しないエラーが発生しました。 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

33
dross

を使用して:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Powershell 3.0 Invoke-WebRequest HTTPSがすべてのリクエストで失敗する から取得。

68
dross

私の場合、TLSトリックは機能しませんでしたが、これはPowerShellのバグのようです。コールバックを追加する必要がありますscriptblockの代わりに.netコードを使用

#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
}
12
Justin