gpt4 book ai didi

PowerShell - 使用未签名的证书查询 REST API

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:08 25 4
gpt4 key购买 nike

我最近从使用 PowerShell ISE 切换到使用 Visual Studio Code

当我从办公室 PC(Win 10 64 位)上的 VSC 中运行 PowerShell 脚本时,使用 Invoke-RestMethod over HTTPS 的 REST 连接都不会针对使用未签名 SSL 证书的服务器进行身份验证。当从我家用 PC(也是 Win 10 64 位)上的 VSC 中运行时,一切正常。

我在 PowerShell 中有一个函数,它使用 System.Net.Security 来处理未签名的 SSL 证书,当我将代码作为 native PowerShell 或从 ISE 运行时,它可以完美运行

以下是我如何使用自签名证书补偿通过 SSL session 连接的 Invoke-RestMethod:

if (-not("dummy" -as [type])) {
add-type -TypeDefinition @"
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

public static class Dummy {
public static bool ReturnTrue(object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors) {
return true;
}

public static RemoteCertificateValidationCallback GetDelegate() {
return new RemoteCertificateValidationCallback(Dummy.ReturnTrue);
}
}
"@
}

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = [dummy]::GetDelegate()
[System.Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

我还将用户名 + 密码编码为 Base64 编码的散列,这是 Invoke-RestMethod 调用的 header :

$pair = "${username}:${password}"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
$basicAuthValue = "Basic $base64"
$headers = @{ Authorization = $basicAuthValue }

所以完整的调用顺序是:

Invoke-RestMethod -Uri "https://theserver.com/rest/api/whatever" -Method Get -Headers $headers

托管 REST API 的服务器,使用 Apache Tomcat 的 Confluence,在从 ISE 内运行或直接执行 PowerShell 时接受身份验证,但如果我尝试从在 VSC 中,但只能在办公室的 PC 上,不能在家里。我怀疑是安全证书问题或策略交互。

最佳答案

我刚刚将我在办公室的版本的分支与之前的版本进行了比较,发现一个小错字在我没有注意到的情况下破坏了密码的解码。

毕竟不是 VSC;只是我不勤奋。

关于PowerShell - 使用未签名的证书查询 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51183639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com