Runspace使用Powershell的异步API进行验证

时间:2015-07-11 19:30:42

标签: .net powershell dotnet-httpclient

我在Powershell中调用一个库,它使用.NET HttpClient发出POST请求。客户端调用在后台线程上运行。它适用于HTTP。当我使用HTTPS时,我遇到了问题。服务器未使用有效的签名证书。我使用以下方法禁用了该检查:

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

只有与运行空间相关的错误才能满足:

  

System.Management.Automation.PSInvalidOperationException:没有   可用于在此线程中运行脚本的运行空间。你可以提供一个   在。的DefaultRunspace属性中   System.Management.Automation.Runspaces.Runspace类型。脚本块   你试图调用的是:$ true

从一些研究来看,它似乎与API是异步/使用任务这一事实有关。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

尝试使用证书政策吗?

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 

答案 1 :(得分:1)

请注意,当您关闭验证时,您需要关闭所有内容 - 我写的验证器比@Trondh的推荐更加谨慎 - 不要&#39 ; t只返回true,确保证书至少有效(即使是自签名),并且仅允许特定域的自签名证书。

FWIW,我在Splunk工作时为.Net编写了一个Tuneable SSL Validator来处理Splunk默认使用自签名证书的事实。它有一个PowerShell模块,其中包含让您信任会话证书的命令,​​或者只是禁用证书链验证(因此您可以信任没有证书链的有效自签名证书)......并且它包含{{1}的包装器}和Invoke-WebRequest甚至Invoke-RestMethod添加Export-ODataEndpointProxy开关,以便您只需为一个请求停用SSL。

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