2016-06-27 10 views
0

Der Versuch, Kerberos zu arbeiten.Kerberos, impersonate Ursachen 500 Fehler

Mit Blick auf Wireshark-Ausgabe wird der Windows-Benutzername an mein Testskript übergeben, aber wenn ich in IIS impersonate einschalten, bekomme ich einen 500 internen Serverfehler.

Das Skript ist wie folgt:

<%@ Page Language="C#" Debug="true" %> 
<%@ Import Namespace="System.Net" %> 
<% 
WebClient client = new WebClient(); 
string downloadString = client.DownloadString("http://10.6.2.117/DEV/api/1.5.12077.001/en-GB/8/56/Incident/GetList?%24id=1&StartIndex=0&PageLength=10"); 

Response.Write(downloadString); 
%> 

ich die URL direkt ohne Probleme über einen Browser zugreifen können.

Mit impersonate ausgeschaltet ich die folgende wireshark Ausgang (Linie 8 zeigt Benutzername):

"1","0.000000","10.21.4.3","10.6.2.105","TCP","66","59546 → 7001 [SYN] Seq=0 Win=65535 Len=0 MSS=1260 WS=256 SACK_PERM=1" 
"2","0.000092","10.6.2.105","10.21.4.3","TCP","66","7001 → 59546 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1" 
"3","0.017328","10.21.4.3","10.6.2.105","TCP","60","59546 → 7001 [ACK] Seq=1 Ack=1 Win=262144 Len=0" 
"4","0.019120","10.21.4.3","10.6.2.105","HTTP","404","GET /test.aspx HTTP/1.1 , NTLMSSP_NEGOTIATE" 
"5","0.104296","10.6.2.105","10.21.4.3","HTTP","1940","HTTP/1.1 401 Unauthorized , NTLMSSP_CHALLENGE (text/html)" 
"6","0.123311","10.21.4.3","10.6.2.105","TCP","60","59546 → 7001 [ACK] Seq=351 Ack=1261 Win=262144 Len=0" 
"7","0.123314","10.21.4.3","10.6.2.105","TCP","60","59546 → 7001 [ACK] Seq=351 Ack=1887 Win=261376 Len=0" 
"8","0.125557","10.21.4.3","10.6.2.105","HTTP","624","GET /test.aspx HTTP/1.1 , NTLMSSP_AUTH, User: EMEA\xxxxxx" 
"9","0.183273","10.6.2.105","10.21.4.3","TCP","3834","[TCP segment of a reassembled PDU]" 
"10","0.203950","10.21.4.3","10.6.2.105","TCP","60","59546 → 7001 [ACK] Seq=921 Ack=3147 Win=262144 Len=0" 
"11","0.203953","10.21.4.3","10.6.2.105","TCP","60","59546 → 7001 [ACK] Seq=921 Ack=4407 Win=262144 Len=0" 
"12","0.203955","10.21.4.3","10.6.2.105","TCP","60","59546 → 7001 [ACK] Seq=921 Ack=5667 Win=262144 Len=0" 
"13","0.204018","10.6.2.105","10.21.4.3","HTTP","2389","HTTP/1.1 500 Internal Server Error (text/html)" 
... 

Mit impersonate eingeschaltet, erhalte ich (Linie 4 - kein Benutzername):

"1","0.000000","10.21.4.3","10.6.2.105","TCP","66","59648 → 7001 [SYN] Seq=0 Win=65535 Len=0 MSS=1260 WS=256 SACK_PERM=1" 
"2","0.000111","10.6.2.105","10.21.4.3","TCP","66","7001 → 59648 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1" 
"3","0.018178","10.21.4.3","10.6.2.105","TCP","60","59648 → 7001 [ACK] Seq=1 Ack=1 Win=262144 Len=0" 
"4","0.019833","10.21.4.3","10.6.2.105","HTTP","404","GET /test.aspx HTTP/1.1 , NTLMSSP_NEGOTIATE" 
"5","0.111015","10.6.2.105","10.21.4.3","HTTP","1466","HTTP/1.1 500 Internal Server Error (text/html)" 
... 

Jede Hilfe wäre willkommen

Antwort

0

Nun, wir kamen am Ende nach viel Hantieren und mit der Beteiligung von einem halben Dutzend Mitarbeiter.

im Falle Also, es von Nutzen jemand anderes ist, sind hier einige nützliche Erkenntnisse:

  1. Sicherstellen, dass der FQDN für die alle URLs verwendet wird, dh sowohl im Client-Browser, sowie die URL vom ersten Webserver zum zweiten aufgerufen werden.

  2. IIS Application Pool Einstellungen:

    • Managed Pipeline = Integrated
    • Identität = Application (andere Optionen auch funktionieren kann)
  3. IIS-Authentifizierungseinstellungen:

    • Anonyme Authentifizierung = Deaktiviert
    • ASP .NET-Identitätswechsel = Aktiviert
    • Basic Authentication = Deaktiviert
    • Formularauthentifizierung = Deaktiviert
    • Windows-Authentifizierung = Aktiviert
      • Erweiterte Einstellungen:
      • Erweiterter Schutz = Aus
      • aktivieren Kernel -mode authentication = Aus
      • Anbieter: Muss in dieser Reihenfolge angegeben werden. Aktivieren Sie nicht nur die Option "Verhandeln".
        • Verhandeln: Kerberos
        • NTLM

Und schließlich ein anderes Testskript:

<%@ Page Language="C#" Debug="true" %> 
<%@ Import Namespace="System.Net" %> 
<%@ Import Namespace="System.IO" %> 
<% 
// The service we wish to consume 
string uri = "http://eu9992k8dvweb01.emea.world.net/DEV/api/1.5.12077.001/en-GB/8/56/Incident/GetList?StartIndex=0&PageLength=10"; 

//Create web request 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 

//Create credential cache 
CredentialCache myCredCache = new CredentialCache(); 
myCredCache.Add(new Uri(uri), "Negotiate", (NetworkCredential)CredentialCache.DefaultCredentials); 

//Add credentials to web request 
req.Credentials = myCredCache; 
req.Proxy = null; 

// create somewhere for the response to go 
HttpWebResponse httpResponse = null; 

// now use the request 
try 
{ 
    // get the requested page 
    httpResponse = (HttpWebResponse)req.GetResponse(); 

    // output what was returned 
    using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
     Response.Write(streamReader.ReadToEnd()); 
    } 
} 
finally 
{ 
    // close the response object 
    if (httpResponse != null) 
     httpResponse.Close(); 
} 
%>