1. ホーム
  2. .net

[解決済み] Powershell v3 Invoke-WebRequest HTTPSエラー

2022-03-08 02:11:11

質問

Powershell v3のInvoke-WebRequestとInvoke-RestMethodを使用して、POSTメソッドを使用してhttpsのウェブサイトにjsonファイルを投稿することに成功しました。

私が使っているコマンドは

 $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

しかし、GETメソッドを使おうとすると、次のようになります。

 Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Method GET

次のようなエラーが返されます。

 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

以下のコードを使用してSSL証明書を無視することを試みましたが、実際に何かを行っているかどうかはわかりません。

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

何が問題なのか、どうすれば解決できるのか、どなたかご指導ください。

ありがとうございます。

解決方法は?

この回避策でうまくいきました。 http://connect.microsoft.com/PowerShell/feedback/details/419466/new-webserviceproxy-needs-force-parameter-to-ignore-ssl-errors

基本的には、PowerShellスクリプトで。

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

$result = Invoke-WebRequest -Uri "https://IpAddress/resource"