了解 CheckValidationResult 的证书从何而来

发布时间:2021-02-25 13:49

我们有一个 powershell 脚本,用作客户客户端的启动脚本,用于获取机器信息。

重要的部分是下面的摘录:

    add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    using System.Runtime.InteropServices;
    using System.ComponentModel;
    using System;

    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate cert, WebRequest request, int policyErrors) {
            
            var hexaVal = Convert.ToString(policyErrors, 16).ToUpper();
            var hrEx = Marshal.GetExceptionForHR(policyErrors);
            System.Console.WriteLine("cert hash: [{0}], problem: [{1}], win32ErrorHexaVal: [{2}], win32ErrorMsg: [{3}]", 
                cert.GetCertHashString(), 
                policyErrors,
                hexaVal,
                hrEx.Message);
            
            
            if (policyErrors == 0)
            {
                    return true;
            }       
            if (cert.GetCertHashString() == "fictitiousHash1" 
            || cert.GetCertHashString() == "fictitiousHash2")
            {
                return true;
            }
            
            return false;
        }
    }
"@
}

我在其中嵌入了 C# 代码以验证使用 Invoke-RestMethod ($myUrl) -Method 'POST' -Headers $headers -Body $body 执行的 http 请求

我希望所有计算机都打印相同的证书哈希 - 据我所知,它驻留在服务器中,这意味着所有请求都应该相同。这就是发生的情况,除了一台计算机打印不同的哈希值。

我在 string.Format 中添加了额外的参数,试图弄清楚这会如何/为什么会发生。

无济于事。 还是没有头绪。

有人可以帮忙吗?

回答1