2015-07-11 43 views
2

我正在調用Powershell中的一個使用.NET HttpClient發出POST請求的庫。客戶端調用在後臺線程上運行。它適用於HTTP。當我使用HTTPS時,但遇到問題。服務器未使用有效的簽名證書。我禁用了檢查正確使用:Runspace issus使用Powershell中的異步API

System.Management.Automation.PSInvalidOperationException::沒有 運行空間可用於運行腳本

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

只有

通過這個錯誤涉及到的運行空間來滿足在這個線程中。您可以在 System.Management.Automation.Runspaces.Runspace類型的DefaultRunspace屬性中提供一個 。 您曾嘗試調用的腳本塊是:$真

從一些調查,這似乎是相關的事實是,API是異步/使用任務。

任何幫助將不勝感激。

回答

3

請嘗試並使用cert策略嗎?

add-type @" 
    using System.Net; 
    using System.Security.Cryptography.X509Certificates; 

    public class NoSSLCheckPolicy : ICertificatePolicy { 
     public NoSSLCheckPolicy() {} 
     public bool CheckValidationResult( 
      ServicePoint sPoint, X509Certificate cert, 
      WebRequest wRequest, int certProb) { 
      return true; 
     } 
    } 
"@ 
[System.Net.ServicePointManager]::CertificatePolicy = new-object NoSSLCheckPolicy 
+0

工作,真棒!你搖滾! –

1

要注意的是,當你關閉驗證,你關閉它的一切 - 我會更認真書寫驗證好像有點比@ Trondh的建議 - 不只是返回true,確保證書至少有效(即使是自簽名),並且只允許特定域的自簽名證書。

FWIW,我在Splunk工作時爲.NET編寫了Tuneable SSL Validator,以處理Splunk默認使用自簽名證書的事實。它有一個PowerShell模塊,其中包含命令讓您可以信任某個會話的證書,或者只是禁用證書鏈驗證(因此您可以信任沒有證書鏈的有效自簽名證書)......並且它具有圍繞Invoke-WebRequestInvoke-RestMethod的包裝和即使Export-ODataEndpointProxy添加Insecure開關,以便您可以僅爲一個請求禁用SSL。

https://github.com/Jaykul/Tunable-SSL-Validator