我使用HttpClient与我的WebAPI服务进行通信。对于SSL身份验证,我使用WebRequestHandler -
在HttpClient上设置客户端证书 private static WebRequestHandler CreateWebRequestHandler(List<X509Certificate2> clientCertificates)
{
WebRequestHandler handler = new WebRequestHandler();
if (clientCertificates != null && clientCertificates.Any())
{
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
clientCertificates.ForEach(cert => handler.ClientCertificates.Add(cert));
}
return handler;
}
在服务上,我有一个自定义DelegatingHandler来使用指纹验证客户端证书 -
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
X509Certificate2 certificate = request.GetClientCertificate();
// Code to validate certificate's Thumbprint with white listed thumbprints
}
从HttpRequest,我只能获得一个客户端证书。
我的问题:为什么WebRequestHandler允许设置ClientCertificates集合?它是否向服务器提供所有客户端证书?如果是,那么如何在DelegatingHandler中获取客户端证书列表?