为了解决我们的网站测试PowerShell脚本的问题,我们在调用Invoke-WebRequest之前添加了以下代码(每个this和this:
<category><pattern>STEP 1</pattern>
<template>Step 2</template>
</category>
<category><pattern>YES</pattern><that>STEP 2</that>
<template>step 3</template>
</category>
<category><pattern>NO</pattern><that>STEP 2</that>
<template>step 3</template>
</category>
<category><pattern>*</pattern><that>STEP 2</that>
<template>step 3</template>
</category>
<category><pattern>*</pattern><that>STEP 3</that>
<template>Step 4! and you typed '<star/>'</template>
</category>
然后要添加有效的TLS策略,我们最近添加了:
Human : step 1
Robot : Step 2
Human : yes
Robot : step 3
Human : yes
Robot : Step 4! and you typed 'yes'
Human : step 1
Robot : Step 2
Human : no
Robot : step 3
Human : no
Robot : So. // ? I expected here step 4
Human : step 1
Robot : Step 2
Human : any
Robot : any is a name. // ? I expected here step 3
我的问题很简单。此代码如何影响Invoke-webrequest?据我所知,它没有直接链接到呼叫。没有任何内容适用于会话变量(很明显)。
我看到了一个对回调函数的引用,但是我仍然看不到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
$login = Invoke-WebRequest "https://...."
如何作为回调传递。但是它有效。
答案 0 :(得分:2)
PowerShell是一个.NET
应用程序。 .NET
个应用程序具有一个AppDomain(只有一个;这就是为什么您需要重新启动powershell.exe
以清除会话的原因)。作为此过程的一部分,您有一个System.Net.ServicePointManager
类to manage HTTP connections(我强烈建议您阅读本文以更全面地了解该知识)。
使用TrustAllCertsPolicy
对象的第一部分代码的原因是由于自签名证书的不可信性质,这告诉了我要么
因此,它所做的就是让Invoke-WebRequest
接受任何证书(如果您不知道要连接的内容,这很危险)。
使用SecurityProtocol
的原因是Win7 / W2K8不支持TLS1.2作为默认设置。通常使用SCHANNEL registry keys(some additional reading)处理此问题,但默认情况下它们在那些平台上不存在(我可能会记错这部分),因此您的AppDomain默认为SSL3.0 / TLS1.0。我建议您在设置-bor
时使用SecurityProtocol
,以免破坏向后或向前的兼容性:
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor [System.Net.SecurityProtocolType]::Tls12
答案 1 :(得分:-1)
首先,我们要弄清楚,该Powershell有效地禁用了TLS,并使您的所有https请求都不安全,因为绝对不执行任何证书验证(它始终返回true)。
工作方式的工作原理如下:
我不确定您要使用这种方法解决什么问题,但是我不建议您使用这种方法。