Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从控制台应用程序向web api发送/接收客户端证书_C#_.net Core_Certificate_Asp.net Core Webapi_Client Certificates - Fatal编程技术网

C# 无法从控制台应用程序向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来接受客户端证书。
我使用以下代码从
控制台应用程序调用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,因为证书链不受信任