我在使用本地ISE使用以下API从GCP获取项目详细信息时遇到了这个问题。我使用下面的代码来获取代币并点击GCP。
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$Uri = "https://IpAddress/api/token/gcp/"
$jwtToken = Invoke-RestMethod -Uri $Uri -Method POST -ContentType "application/json" -Body {}
$token = $jwtToken.access_token
$getUrl = "https://cloudresourcemanager.googleapis.com/v3/projects/XXXXXXXXX"
$headers = @{'Content-Type'='application/json';'Authorization'='Bearer $token'}
$getTags = Invoke-RestMethod -Uri $getUrl -Method Get -Headers $headers
脚本的前4行用于获取令牌,该令牌用于获取项目详细信息。当我尝试在没有此[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
的情况下获取令牌时,出现了类似的错误。
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
为了解决这个问题,我在我的脚本中添加了以下代码行
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
上面的一行干扰了整个剧本吗?或者我有什么遗漏了。有人能帮我把这个错误分类吗。
谢谢
[更新]
你的问题是这行代码:
$Uri = "https://IpAddress/api/token/gcp/"
只有自签名证书具有CN的IP地址(通用名称(。这就是证书验证失败的原因。
将IpAddress更改为域名。如果您的服务没有与SSL证书匹配的域名,那么您必须禁用证书验证,或者编写一个自定义验证器来了解自签名证书的哈希值。
[结束更新]
通过将ServerCertificateValidationCallback设置为返回true,可以防止证书验证(忽略证书错误(。
不要禁用证书验证
根证书或TLS协议版本存在潜在问题。
更换
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
带
[Net.ServicePointManager]::SecurityProtocol = Net.SecurityProtocolType]::Tls12