c# - .NET Core 自定义服务器证书 CA

标签 c# .net validation kubernetes x509certificate

我想从集群外部的 .NET Core 应用程序调用 Kubernetes API。

我有一个带有 HttpClientHandler 的 HttpClient,我在其中设置此回调以忽略无效(不受信任)的证书,并且它有效:

handler.ServerCertificateCustomValidationCallback +=
    (message, certificate, chain, errors) => true;

但是在 kubectl 的 kubeconfig 中我有这个:

...
clusters:
- cluster:
    certificate-authority-data: SOME_AUTHORITY_DATA
    server: https://myserver.io:443
...

如何在我的应用程序中使用该证书颁发机构数据来验证服务器证书?

最佳答案

private static byte[] s_issuingCABytes = { ... };

handler.ServerCertificateCustomValidationCallback +=
    (message, certificate, chain, errors) =>
    {
        const SslPolicyErrors Mask =
#if CA_IS_TRUSTED
            ~SslPolicyErrors.None;
#else
            ~SslPolicyErrors.RemoteCertificateChainErrors;
#endif

        // If a cert is not present, or it didn't match the host.
        // (And if the CA should have been root trusted anyways, also checks that)
        if ((errors & Mask) != SslPolicyErrors.None)
        {
            return false;
        }

        foreach (X509ChainElement element in chain.ChainElements)
        {
            if (element.Certificate.RawData.SequenceEqual(s_issuingCABytes))
            {
                // The expected certificate was found, huzzah!
                return true;
            }
        }

        // The expected cert was not in the chain.
        return false;
    };

关于c# - .NET Core 自定义服务器证书 CA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50770022/

相关文章:

c# - Silverlight 和应用程序状态

java - 创建自定义 Nullable 注释

.net - 如何使用完全独立的 .NET 3.5 sp1 安装程序制作 WiX 安装程序?

c# - Entity Framework ID 自动递增

php - 移动设备发出的 HTML 表单必填字段

javascript - 所有浏览器似乎都忽略 JavaScript 客户端表单验证规则

c# - 首先使用 Entity Framework 数据库从 SQL 查询 Xml

c# - 字符串替换c#为地址缩写

javascript - 如何使用 Jquery .load() 重新加载部分 View ?

C# - GroupPrincipal.GetMembers(true) - 哪个组?