C# 无法从控制台应用程序向web api发送/接收客户端证书
我创建了一个Web Api来接受客户端证书。C# 无法从控制台应用程序向web api发送/接收客户端证书,c#,.net-core,certificate,asp.net-core-webapi,client-certificates,C#,.net Core,Certificate,Asp.net Core Webapi,Client Certificates,我创建了一个Web Api来接受客户端证书。 我使用以下代码从控制台应用程序调用web api var uri=新uri(“https://myservice.azurewebsites.net/api/values"); var handler=新的WebRequestHandler(); handler.ClientCertificateOptions=ClientCertificateOptions.Manual; var certResults=新的X509Store(StoreLoca
我使用以下代码从
控制台应用程序调用web api
var uri=新uri(“https://myservice.azurewebsites.net/api/values");
var handler=新的WebRequestHandler();
handler.ClientCertificateOptions=ClientCertificateOptions.Manual;
var certResults=新的X509Store(StoreLocation.LocalMachine);
var certStore=new X509Store(StoreName.My,StoreLocation.CurrentUser);
尝试
{
打开(OpenFlags.ReadOnly);
}
捕获(例外)
{
Console.WriteLine(“无法访问证书存储”);
}
var指纹=”;
var certCollection=certStore.Certificates.Find(X509FindType.FindByThumbprint,指纹,false);
certStore.Close();
HttpClient=新的HttpClient(处理程序);
如果(certCollection.Count>0)
{
handler.ClientCertificates.Add(certCollection[0]);
client.DefaultRequestHeaders.Add(“指纹”,certCollection[0]。指纹);
}
var result=client.GetAsync(uri).GetAwaiter().GetResult();
WriteLine($“status:{result.StatusCode}”);
WriteLine($”内容:{result.content.ReadAsStringAsync().GetAwaiter().GetResult()}”);
Console.ReadLine();
}
在服务器端,我添加了一个中间件来获取证书的详细信息
{
//var-certHeader=context.Request.Headers[“X-ARR-ClientCert”];
var certificate=context.Connection.ClientCertificate;
如果(证书!=null)
{
尝试
{
//var clientCertBytes=Convert.FromBase64String(certHeader);
//var证书=新的X509Certificate2(clientCertBytes);
bool isValidCert=IsValidClientCertificate(证书);
if(isValidCert)
{
wait_next.Invoke(上下文);
}
其他的
{
_logger.LogError(“证书无效”);
context.Response.StatusCode=403;
}
}
捕获(例外情况除外)
{
_logger.LogError(例如消息,例如);
wait context.Response.WriteAsync(例如Message);
context.Response.StatusCode=403;
}
}
其他的
{
_logger.LogError(“缺少X-ARR-ClientCert头”);
context.Response.StatusCode=403;
}
}
我试着在本地机器和Azure应用服务上运行它。
我在resources.azure.com
中将标志clientCertEnabled
设置为true
。
Web Api启用了SSL
但是证书总是以null
的形式出现在两个
var-certHeader=context.Request.Headers[“X-ARR-ClientCert”]代码>和
var-certificate=context.Connection.ClientCertificate代码>
我做错了什么
提前谢谢。我自己正在研究这些东西,看到你的问题,我想知道你是否有链接中描述的问题之一
具体而言:
4将MyPersonalCA.cer添加到本地计算机->Truted根证书颁发机构。这是关键,尤其是当你在发展和想尝试的时候。如果不这样做,将不会填充Request.ClientCertificate,因为证书链不受信任
我自己正在研究这些东西,看到你的问题,我想知道你是否有链接中描述的问题之一
具体而言:
4将MyPersonalCA.cer添加到本地计算机->Truted根证书颁发机构。这是关键,尤其是当你在发展和想尝试的时候。如果不这样做,将不会填充Request.ClientCertificate,因为证书链不受信任