在ASP.NET Core中允许客户端证书但不要求可以通过以下代码实现:
services.AddMvc()
.AddMvcOptions(options =>
{
options.Filters.Add(new RequireClientCertificateAttribute());
});
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Primitives;
public class RequireClientCertificateAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.HttpContext.Request.Headers.TryGetValue("X-SSL-Client-Certificate", out StringValues certificate))
{
context.HttpContext.Connection.ClientCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(
Convert.FromBase64String(certificate.ToString()));
}
base.OnActionExecuting(context);
}
}
注意:为了测试方便可以使用以下代码获取证书摘要。
var x509Cert = context.HttpContext.Connection.ClientCertificate;
var certThumbprint = x509Cert.Thumbprint;