.NET TLS 设置证书验证签名算法

时间:2021-05-19 10:10:44

标签: c# .net ssl https

我正在连接受额外证书检查保护的 https(通过智能卡)。

我的问题是,当我从 .NET/C# 调用端点时,它抛出“请求被中止:无法创建 SSL/TLS 安全通道。”,从 Chrome 调用它工作正常。我设法用 Wireshark 追踪了问题,罪魁祸首是客户端交换证书验证算法。

破碎:

Broken

工作:

Working

我的代码:

public string GetToken()
    {
        var req = HttpWebRequest.CreateHttp(this.AuthenticationUrl);
        req.Method = "GET";
        req.ClientCertificates.Add(this.Certificate);

        var resp = req.GetResponse() as HttpWebResponse;
        using (var respStream = resp.GetResponseStream())
        using (var respReader = new StreamReader(respStream))
        {
            string xml = respReader.ReadToEnd();

            var doc = XDocument.Parse(xml);

            var message = doc.FirstNode as XElement;
            var content = message.Descendants().FirstOrDefault(p => p.Name.LocalName == "contents");
            this.Token = content.Descendants().FirstOrDefault(p => p.Name.LocalName == "accessToken").Attribute("value").Value;
            string expires = content.Descendants().FirstOrDefault(p => p.Name.LocalName == "expiresOn").Attribute("value").Value;
            this.TokenExpiresOn = DateTime.Parse(expires);

            return this.Token;
        }
    }

this.Certificate 是来自智能卡的有效 X509Certificate2。

似乎.NET 以某种方式设置了 rsa_pss_rsae_sha256 并且服务器无法处理它?<​​/p>

如何强制 .NET/C# 使用 rsa_pkcs1_sha256?

0 个答案:

没有答案