我正在连接受额外证书检查保护的 https(通过智能卡)。
我的问题是,当我从 .NET/C# 调用端点时,它抛出“请求被中止:无法创建 SSL/TLS 安全通道。”,从 Chrome 调用它工作正常。我设法用 Wireshark 追踪了问题,罪魁祸首是客户端交换证书验证算法。
破碎:
工作:
我的代码:
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?