2014-10-10 16 views
5

मैं एक साधारण सिग्नल एप्लिकेशन बनाना चाहता हूं। http का उपयोग करना सब कुछ ठीक काम करता है, लेकिन जब मैं https और प्रमाणपत्र का उपयोग करने का प्रयास करता हूं तो एप्लिकेशन काम नहीं करता है।प्रमाण पत्र के साथ सिग्नल

अभी के लिए, केवल एक चीज जो मैं करना चाहता हूं वह सर्वर में क्लाइंट प्रमाणपत्र है।

सर्वर (प्रमाणीकरण हैंडलर):

public class ClientCertificateAuthenticationHandler : AuthenticationHandler<ClientCertificateAuthenticationOptions> 
{ 
    protected override Task<AuthenticationTicket> AuthenticateCoreAsync() 
    { 
     var cert = Context.Get<X509Certificate>("ssl.ClientCertificate"); 

     if (cert == null) 
     { 
      return Task.FromResult<AuthenticationTicket>(null); 
     } 

     try 
     { 
      Options.Validator.Validate(cert); 
     } 
     catch 
     { 
      return Task.FromResult<AuthenticationTicket>(null); 
     } 
     return null; 
    } 
} 

ग्राहक (हब)

var connection = new HubConnection("https://localhost:8080/"); 
connection.AddClientCertificate(X509Certificate.CreateFromCertFile("c1.cer")); 
IHubProxy myHub = connection.CreateHubProxy("MyHub"); 
connection.Start().Wait(); 

सर्वर में, ऐसा करने से जब मैं कर var cert = Context.Get<X509Certificate>("ssl.ClientCertificate"); मैं null मिलता है।

तो, मैं क्या गलत कर रहा हूं?

उत्तर

4

आपको क्लाइंट प्रमाणपत्र का उपयोग करने के लिए आईआईएस को भी बताना होगा। web.config में कार्य करें:

<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"); 
} 
+0

उत्तर के लिए धन्यवाद। मैंने अपने App.config में कॉन्फ़िगरेशन लगाए, लेकिन परिणाम वही था। –

+1

मैंने एंट्री एसएसएल => SslNegotiateCert – pm100

+0

को सही किया है मैंने पहले ही कोशिश की है। लेकिन अभी भी काम नहीं कर रहा है। शेष कोड में कुछ हो सकता है, लेकिन मैं यह नहीं समझ सकता कि क्या। –

संबंधित मुद्दे