C# 持证信号员

C# 持证信号员,c#,ssl,signalr,ssl-certificate,owin,C#,Ssl,Signalr,Ssl Certificate,Owin,我想创建一个简单的信号器应用程序。 使用http一切正常,但当我尝试使用https和证书时,应用程序无法工作 目前,我唯一想做的就是在服务器中获取客户机的证书 服务器(身份验证处理程序): 执行此操作时,在服务器中执行var cert=Context.Get(“ssl.ClientCertificate”)我得到null 那么,我做错了什么?您还必须告诉IIS使用客户端证书。在web.configdo中: <location path="signalr"> <system

我想创建一个简单的信号器应用程序。 使用http一切正常,但当我尝试使用https和证书时,应用程序无法工作

目前,我唯一想做的就是在服务器中获取客户机的证书

服务器(身份验证处理程序):

执行此操作时,在服务器中执行
var cert=Context.Get(“ssl.ClientCertificate”)我得到
null


那么,我做错了什么?

您还必须告诉IIS使用客户端证书。在
web.config
do中:

<location path="signalr">
   <system.webServer>
      <security>
         <access sslFlags="SslNegotiateCert" />
      </security>
   </system.webServer>
</location>


谢谢你的回复。我将配置放在App.config中,但结果是一样的。我已经尝试过了。但仍然不起作用。可能是代码的其他部分,但我不知道是什么。你有一些带有证书的信号器示例吗?我认为.cer文件没有私钥。使用CreateFromCertFile加载证书后,请检查证书上的boolean HasPrivateKey。我正在努力使其正常工作,但当我将“位置”添加到web.config时。IIS站点不再使用以下错误。有什么想法吗?HTTP错误500.19-内部服务器错误无法访问请求的页面,因为该页面的相关配置数据无效。无法在此路径上使用此配置节。当节在父级锁定时会发生这种情况。锁定在默认情况下(overrideModeDefault=“Deny”),或者由带有overrideMode=“Deny”或旧版allowOverride=“false”的位置标记显式设置。
var connection = new HubConnection("https://localhost:8080/");
connection.AddClientCertificate(X509Certificate.CreateFromCertFile("c1.cer"));
IHubProxy myHub = connection.CreateHubProxy("MyHub");
connection.Start().Wait();
<location path="signalr">
   <system.webServer>
      <security>
         <access sslFlags="SslNegotiateCert" />
      </security>
   </system.webServer>
</location>
var cert = ServiceCallHelper.GetClientCertificate();
var url = new Uri(Settings.CoreUrl);
var str = String.Format("https://{0}/cert_signalr", url.Host);
var hub = new HubConnection(str, false);
hub.AddClientCertificate(cert);
object cert = null;
if (!hub.Context.Request.Environment.TryGetValue("ssl.ClientCertificate", out cert) ||
   !(cert is X509Certificate2))
{
   s_logger.WarnFormat("Hub {0} called without certificate or cookie", hub.Context.Request.ToString());
   throw new Exception("not authenticated");
}