Donnerstag, 24. Januar 2008

IE Meldung: Access denied due to security policy violation

Im IE erscheint die folgende Meldung:


Access denied due to security policy violation

Reject ID:
47985cd9-0-66060101-7b6
Und es spielt keine Rolle welche Version IE. Ich sah den Fehler in IE 7.0 & 6.0. Was sehr schön ist ;-) dass der Fehler nicht immer auftritt. Bei ein par Client funktioniert es und bei anderen nicht. Es kann auch sein das ein Client einen ganzen Tag ohne Probleme die Site aufrufen kann und plötzlich kommt die Fehler Meldung "Access denied ..."

Nach etwas debugging mit Wfetch konnte ich den Fehler lokalisieren.

Standart IIS 6.0 ist der Authendication Provider auf "Negotiate, NTLM" eingestellt.
Dies habe ich schon in einem Posting beschrieben:
http://sigicom.blogspot.com/2008/01/iis-60-mit-kerberos-und-ntlm.html

Bei einer Anonymous abfrage des IIS gibt dieser diesen Header zurück:

HTTP/1.1 401 Unauthorized\r\n
Date: Thu, 24 Jan 2008 09:39:33
GMT\r\n

Server: Microsoft-IIS/6.0\r\n
WWW-Authenticate: Negotiate\r\n
WWW-Authenticate: NTLM\r\n
X-Powered-By: ASP.NET\r\n
X-AspNet-Version: 1.1.4322\r\n
Cache-Control: private\r\n
Content-Type: text/html;
charset=iso-8859-1\r\n

Content-Length: 14\r\n

Also wird zuerst ein Negotiate gemacht. Bei mir versuchte der IE mit Kerberos zu Authentifizieren und die Meldung in Wfetch:
ISC_REQ_MUTUAL_AUTH ISC_REQ_DELEGATE
set\n

0x80090303 Unable to
InitializeSecurityContext


Dies heisst zwar nur dass mein Client kein Kerberos Service Ticket von der KDC erhalten hat. So kann der IE nicht mit Kerberos Authentifizieren.

Wenn der IIS auf NTLM only umgestellt wird mit:
cscript adsutil.vbs set
w3svc/1/root/NTAuthenticationProviders "NTLM"

Ist die Antwort im Wfetch:
HTTP/1.1 401 Unauthorized\r\n
Date: Thu, 24 Jan 2008 09:36:19
GMT\r\n

Server: Microsoft-IIS/6.0\r\n
WWW-Authenticate: NTLM\r\n
X-Powered-By: ASP.NET\r\n
X-AspNet-Version: 1.1.4322\r\n
Cache-Control: private\r\n
Content-Type: text/html;
charset=iso-8859-1\r\n

Content-Length: 14\r\n

Und die Authentifizierung mit NTLM funktioniert.

So lange nicht alle Clients und Server mit Kerberos Authentifizierung können und die SPN's gesetzt sind, kann diese Fehler immer wieder auf treten.

Freitag, 11. Januar 2008

Access Denied Error When You Make Code Modifications with Index Services Running

Wird ein .NET dll ersetzt bei laufendem Index Service, kommte folgende Fehlermeldung vom machine.config:

Line 169: <add assembly="<System.Drawing," version="1.0.3300.0," culture="neutral," publickeytoken="b03f5f7f11d50a3a">/>
Line 170: <add assembly="<System.EnterpriseServices," version="1.0.3300.0," culture="neutral," publickeytoken="b03f5f7f11d50a3a">/>
Line 171: <add assembly="<*">/>
Line 172: </assemblies>


Lösung Indexer Service stoppen

http://support.microsoft.com/kb/329065/en-us

.NET "System.OutOfMemoryException"

Im .NET gibt es limitierungen zum adressieren von Memory. Hier eine Aussage vom Microsoft.
The recommended approach for tuning is to measure the total memory consumed by the ASP.NET worker process by measuring the Process\Private Bytes (aspnet_wp) performance counter along with paging activity in System Monitor. If the counter indicates that the memory consumption is nearing the default limit set for the process, it might indicate inefficient cleanup in your application. If you have ensured that the memory is efficiently cleaned but you still need to increase the limit, you should do so only if you have sufficient physical memory.
This limit is important to adjust when your server has 4 GB or more of RAM. The 60 percent default memory limit means that the worker process is allocated 2.4 GB of RAM, which is larger than the default virtual address space for a process (2 GB). This disparity increases the likelihood of causing an OutOfMemoryException.
To avoid this situation on an IIS 5 Web server, you should set the limit to the smaller of 800 MB or 60 percent of physical RAM for .NET Framework 1.0.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt17.asp

Der Artikel bezieht auf .NET 1.0 aber die Physikalischen Grenzen sind die selben.
http://support.microsoft.com/kb/820108/en-us

Eventlog- Einträge schreiben mit ASP.NET

Das mit einer .NET Applikation Einträge ins Eventlog gemacht werden können, muss die Applikation Registriert werden.

Dies kann mit mit einer .NET Library gemacht werden, die man im Visual Studio erstellt.

http://support.microsoft.com/kb/329291/en-us

IIS 6.0 mit Kerberos und NTLM

Bei Windows Server 2003 mit Sp1 ist der IIS so konfiguriert, dass dieser immer mit Kerberos versucht zu Authentifizieren.
Es gibt zwei Varianten das Problem zu lösen
Ausschalten von Kerberos, so wird nur mit NTLM Authentifiziert:
http://support.microsoft.com/kb/215383/en-us
z.B.:
cscript adsutil.vbs set w3svc/1/root/NTAuthenticationProviders "NTLM"

Oder setzten des PrincipalNames, für Kerberos Authentifizierung:
Setspn -A HTTP/www.microsoft.com webserver1
http://support.microsoft.com/kb/326985/en-us