2016-12-01 28 views
1

1年以上問題なく動作しているInvoke-RestMethodを呼び出すと、安全な(https)サイトが呼び出されました。多くのテストの結果、のセキュリティで保護されたサイトのリクエストで、コールが一貫して失敗して再現できることがわかりましたが、理由はわかりません。次のコードは失敗します。Powershell Invoke-RestMethod証明書の有効性確認

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} 
Invoke-RestMethod -Uri https://blogs.msdn.com/powershell/rss.aspx | Format-Table -Property Title, pubDate 

生成エラーは以下の通りです:

起動-RestMethod:基礎となる接続が閉じられました:予期しないエラーが送信時に発生しました。 行目:1文字:1 + Invoke-RestMethod -Uri https://blogs.msdn.com/powershell/rss.aspx |フォーマットテーブル... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:はInvalidOperation:(System.Net.HttpWebRequest:HttpWebRequestの)-RestMethodを起動]、WebException + FullyQualifiedErrorId:WebCmdletWebResponseException 、

Microsoft.PowerShell.Commands.InvokeRestMethodCommand

は私は

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

上記の行を含む場合、私が以前に示されたエラーを得ることを見出しました。上記の動作とエラーは、実際にはとは逆のです。以前は、ServerCertificateValidationCallbackをtrueに設定せずにhttps要求を行うことはできませんでした。

さまざまなWindowsユーザープロファイルで複数のコンピュータから試してみましたが、管理者権限でPowerShellを起動しましたが、上記の行を追加すると問題を再現できます。動作させるには、PowerShellを閉じてから再度開いて、ServerCertificateValidationCallback行を削除する必要があります。コードに行を追加すると、エラーが返されます。

私がコードを実行した最後の時間は2週間前であったため、時間枠を正確に特定できるほど狭くなりました。なぜこれが今失敗しているのかについてのアイデアはありますか?

これはではありません。私はもともと問題があったサイトですが、私が直面している問題は上記のコードで再現できます。

+0

[これは役立つかもしれません](http://stackoverflow.com/questions/36265534/invoke-webrequest-ssl-fails/36266735#36266735) –

答えて

0

Huddled Masses blogで解決方法を確認してください。私はこれらを使用し始めていることに基づいて

function Disable-SslVerification 
{ 
    if (-not ([System.Management.Automation.PSTypeName]"TrustEverything").Type) 
    { 
     Add-Type -TypeDefinition @" 
using System.Net.Security; 
using System.Security.Cryptography.X509Certificates; 
public static class TrustEverything 
{ 
    private static bool ValidationCallback(object sender, X509Certificate certificate, X509Chain chain, 
     SslPolicyErrors sslPolicyErrors) { return true; } 
    public static void SetCallback() { System.Net.ServicePointManager.ServerCertificateValidationCallback = ValidationCallback; } 
    public static void UnsetCallback() { System.Net.ServicePointManager.ServerCertificateValidationCallback = null; } 
} 
"@ 
    } 
    [TrustEverything]::SetCallback() 
} 
function Enable-SslVerification 
{ 
    if (([System.Management.Automation.PSTypeName]"TrustEverything").Type) 
    { 
     [TrustEverything]::UnsetCallback() 
    } 
} 

悪いニュースはそれがいつかこの週動作を停止しているため、更新に基づいて、私は戻ってStackOverflowの上だということです...

の場合古いバージョンのPowershellを使用していると、まだ投稿したコードでうまくいくかもしれません。

関連する問題