使用powershell downloadstring忽略SSL警告

时间:2015-12-17 09:39:56

标签: powershell ssl

我有一个漂亮的单行班轮,通过任务计划程序调用我的网络服务:

-ExecutionPolicy unrestricted -Command "(New-Object Net.WebClient).DownloadString(\"https://127.0.0.1/xxx\")"

但我的网络服务现在有SSL,我想进行本地调用,因此它会产生SSL异常。那么有没有办法忽略这个衬管的SSL警告?

2 个答案:

答案 0 :(得分:21)

使用单行程序,您无法忽略SSL警告(使用WebClient downloadstring方法)。

您可以在调用命令之前尝试执行此操作:

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

由于您在任务计划程序中使用此功能,因此我应在DownloadString命令之前使用&#39 ;;'添加它。分开这两个命令。

这应该可以解决问题,这会在会话中设置回调:

 -ExecutionPolicy unrestricted -Command "[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true};(New-Object Net.WebClient).DownloadString(\"127.0.0.1/xxx\")" 

如果您安装了较新的Powershell(检查是否有可用的invoke-webrequest cmdlet),则可以将此cmdlet添加到安全策略中。仍然不是一个单行,但这应该做的伎俩:

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://127.0.0.1/xxx"

尝试查看它是否可以在普通主机上运行,​​如果是这样,您可以将其捆绑在一个简单的脚本中,并在计划任务中使用它。

答案 1 :(得分:1)

如果要实施条件策略,请使用以下内容。

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {
    param(
        [object]$sender,
        [Security.Cryptography.X509Certificates.X509Certificate] $certificate, 
        [Security.Cryptography.X509Certificates.X509Chain] $chain, 
        [Net.Security.SslPolicyErrors] $sslPolicyErrors
    )
    # Implement your custom logic here
    $true
}