gpt4 book ai didi

authentication - HttpClientHandler.ClientCertificates 是否只导致将叶证书或整个证书层次结构发送到服务器?

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:02 24 4
gpt4 key购买 nike

在 .net core 2.2(或更高版本)中,可以编写以下代码(在客户端)向启用了双向 TLS 身份验证的 REST 服务发送 json 请求并从中获取 json 响应:

var clientHandler = new HttpClientHandler();
clientHandler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;

//Load Leaf Client Certificate
var clientCertPath = @"<pfx-file-path>";
var password = "<password>";
var clientCertificate = new X509Certificate2(clientCertPath, password);

clientHandler.ClientCertificates.Add(clientCertificate);

clientHandler.ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) =>
{
//Validate web server cert
return true;
};

var client = new HttpClient(clientHandler);
var requestJson = "<json string>";
var content = new StringContent(requestJson, System.Text.Encoding.UTF8, "application/json");

var response = client.PostAsync("<web-url>", content).Result;
var responsString = response.Content.ReadAsStringAsync().Result;

请注意附加客户端叶证书的代码中的以下行:

clientHandler.ClientCertificates.Add(clientCertificate);

我的问题是:

  1. .net 核心框架是否仅将叶客户端证书(不包括中间证书和根证书)发送到 REST 服务?或者它是否包括客户端证书层次结构中的所有证书(即叶证书、中间证书和根证书)?
  2. 此行为是否会根据客户端平台而改变(即,如果客户端在 Windows 或 Linux 上运行)?

最佳答案

它应该发送叶子和中间体(但不是根)。

选择客户端证书后(当集合中只有一个东西时,这是一种简单的算法)SslStream 使用 X509Chain 构建链的其余部分,以便它可以包含中间体。当客户端机器信任自己的证书(并且可以完全解析链以表明信任)时,它最有效(但不是严格要求)。

如果链构建以不受信任的根结束(即,它以自签名证书结束),则仍会发送中间件;但是 .NET Core 2.x 有 a bug在 Linux(可能还有 macOS)上,如果链在没有自签名证书的情况下结束,它发送的证书比预期的要少(它错误地将最后一个证书计为根证书,无论如何都不发送)。在标准的 3 深链(根 -> 发行者 -> 终端实体)中,这意味着它看起来与“仅发送叶证书”相同。

关于authentication - HttpClientHandler.ClientCertificates 是否只导致将叶证书或整个证书层次结构发送到服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57684345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com