2016-09-27 3 views
0

Ich erhalte jedes Mal einen Fehler, wenn ich versuche, mein MVC-Projekt über VS2015 und IIS Express auf meiner Entwicklungsumgebung auszuführen. Es verwendet diesen Code zur Authentifizierung gegenüber unserem ADFS-Server.UseWsFederationAuthentication - AuthenticationException: Das Remotezertifikat ist gemäß dem Überprüfungsverfahren ungültig

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 
      app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

      app.UseWsFederationAuthentication(
       new WsFederationAuthenticationOptions 
       { 
        Wtrealm = realm, 
        MetadataAddress = adfsMetadata 
       }); 

Dies ist der Fehler, den ich im Browser bekomme.

[AuthenticationException. Die Fern Zertifikat ungültig ist mit dem Validierungsverfahren gemäß]
System.Net.TlsStream.EndWrite (IAsyncResult asyncResult) +231
System.Net.PooledStream.EndWrite (IAsyncResult asyncResult) +15
System.Net.ConnectStream.WriteHeadersCallback (IAsyncResult ar) +119

[WebException: Die zugrunde liegende Verbindung wurde geschlossen:. Könnte keine Vertrauensstellung für den sicheren SSL/TLS-Kanal etablieren]
System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) +606 System.Net.Http.HttpClientHandler.GetResponseCallback (IAsyncResult ar) +64

[HttpRequestException. Fehler beim Senden der Anforderung]
Systems .Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +28 Microsoft .IdentityModel.Protocols.d__0.MoveNext() +453

[IOException: Kann Dokument erhalten von: https://adfs.DOMAIN.com/FederationMetadata/2007-06/FederationMetadata.xml] Microsoft.IdentityModel.Protocols.d__0.MoveNext() 830 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) +92
-System. Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() +28 Microsoft.IdentityModel.Protocols.<GetAsync>d__1.MoveNext() +606 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() +28 Microsoft.IdentityModel.Protocols.d__3.MoveNext() +1332

[InvalidOperationException : IDX10803: Unabl e erstellen Konfiguration von erhalten. 'https://adfs.DOMAIN.com/FederationMetadata/2007-06/FederationMetadata.xml'] Microsoft.IdentityModel.Protocols.d__3.MoveNext() 2226 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) +92
-System. Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +28 Microsoft.Owin.Security.WsFederation.d__c.MoveNext() 772 System.Runtime. CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Security.Infrastructure.d__b.MoveNext() +447 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Security.Infrastructure.d__8. Movenext() +440 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult () +26 Microsoft.Owin.Security.Infrastructure.d__5.MoveNext() +266 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Security.Infrastructure.d__0.MoveNext() 1174 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__5.MoveNext() +287 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Security.Infrastructure.d__0.MoveNext() 937 System.Runtime .CompilerServices.TaskAwaiter.ThrowForNonSuccess (Aufgabe Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Host .SystemWeb.IntegratedPipeline.d__5.MoveNext() +287 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task Aufgabe) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Aufgabe Aufgabe) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__2.MoveNext() 272-System. Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +26 Microsoft.Owin.Host.SystemWeb.Infrastructure.ErrorState.Rethrow() +33 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End (IAsyncResult ar) +150
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork (IAsyncResult ar) +42
System.Web.AsyncEventExecutionStep.OnAsyncEventCompletion (IAsyncResult ar) 9.791.593

Es funktionierte und jetzt ist es nicht mehr. Ein bisschen wie meine Kinder beim Abwasch. :)

Irgendwelche Gedanken darüber, warum dies nicht funktioniert, warum das Remote-Zertifikat ist ungültig nach der Validierungsprozedur (Wo ist das Verfahren?), Und wie kann ich das wieder in Gang bringen und laufen?

Vielen Dank!

Antwort

1

Nach Spur stapeln, ist der erste Schritt des Authentifizierungsprozesses ist, dass Ihre Anwendung ADFS zum Download benötigt Metadaten über https und dass das SSL-Zertifikat nicht die Validierungsverfahren durchlaufen.

Sie auf andere Fragen in SO beziehen kann, was das Validierungsverfahren ist: The remote certificate is invalid according to the validation procedure

Es gibt wahrscheinlich zwei Möglichkeiten, es zu beheben:

  1. Der Hack, muss-nicht-use-for- Produktion ist, die Prüfung zu deaktivieren: "The remote certificate is invalid according to the validation procedure." using Gmail SMTP server
  2. Wenn das SSL-Zertifikat nicht selbstsigniert und noch gültig ist (z. B. wird von einer vertrauenswürdigen CA ausgestellt, ist nicht abgelaufen und ist noch nicht widerrufen), müssen Sie möglicherweise überprüfen Sie Ihren Client Maschine, wenn sie der CA vertraut. Dieser Fall ist seltener.
+0

Danke Thuan für deine Antwort. Nachdem ich deine Antwort gelesen hatte, konnte ich mir eine Antwort einfallen lassen. Ich werde es später veröffentlichen. –

1

Nochmals vielen Dank für Ihre Antwort Thuan.

Aus der Antwort, die ich war in der Lage zu durchdenken, was wirklich passiert war (was in Ordnung immer kritisch ist, Dinge herauszufinden). Der Schlüssel war, zu erkennen, dass das Problem darauf zurückzuführen war, dass das Remote-Zertifikat die Validierungsprüfung nicht bestanden hatte und sonst nichts. So fand ich heraus, dass es im UseWsFederationAuthentication-Aufruf eine BackchannelCertificateValidator-Option gibt, mit der überprüft werden konnte, ob das Zertifikat gültig war oder nicht. Ich fand dann diese post, die mir half, mit dem Code zu kommen, um das Zertifikat zu validieren.

Der Beitrag gefunden, ihren Code von der Microsoft-Website (https://msdn.microsoft.com/en-us/library/office/dd633677(v=exchg.80).aspx). In dem Artikel steht das über den Code.

Die Zertifikatvalidierungscallback-Methode in diesem Beispiel stellt ausreichende Sicherheit für die Entwicklung und Prüfung von EWS Managed API Anwendungen. Es bietet jedoch möglicherweise keine ausreichende Sicherheit für Ihre bereitgestellte Anwendung. Sie sollten immer darauf achten, dass das Zertifikat Validierung Callback-Methode, die Ihnen die Sicherheit Anforderungen Ihres Unternehmens verwenden, erfüllt.

Also muss ich etwas herausfinden, so dass es nur im Debug-Modus läuft.

Der Code:

public void ConfigureAuth(IAppBuilder app) 
     { 

      app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 
      app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

      app.UseWsFederationAuthentication(
       new WsFederationAuthenticationOptions 
       { 

        BackchannelCertificateValidator = new CertificateValidator(), 

        Wtrealm = realm, 
        MetadataAddress = adfsMetadata 
       }); 
     } 

Die Klasse:

public class CertificateValidator : ICertificateValidator 
    { 
     public bool Validate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
     { 
      // If the certificate is a valid, signed certificate, return true. 
      if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None) 
      { 
       return true; 
      } 

      // If there are errors in the certificate chain, look at each error to determine the cause. 
      if ((sslPolicyErrors & System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors) != 0) 
      { 
       if (chain != null && chain.ChainStatus != null) 
       { 
        foreach (System.Security.Cryptography.X509Certificates.X509ChainStatus status in chain.ChainStatus) 
        { 
         if ((certificate.Subject == certificate.Issuer) && 
          (status.Status == System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot)) 
         { 
          // Self-signed certificates with an untrusted root are valid. 
          continue; 
         } 
         else 
         { 
          if (status.Status != System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError) 
          { 
           // If there are any other errors in the certificate chain, the certificate is invalid, 
           // so the method returns false. 
           return false; 
          } 
         } 
        } 
       } 

       // When processing reaches this line, the only errors in the certificate chain are 
       // untrusted root errors for self-signed certificates. These certificates are valid 
       // for default Exchange server installations, so return true. 
       return true; 
      } 
      else 
      { 
       // In all other cases, return false. 
       return false; 
      } 
     } 
    } 
+0

Eine viel bessere Lösung als einfach die Validierung für die Entwicklungsumgebung zu deaktivieren :) – Thuan

Verwandte Themen