Laden...

Htaccess Basic zu Digest wechseln

Erstellt von *neo* vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.397 Views
*
*neo* Themenstarter:in
299 Beiträge seit 2006
vor 10 Jahren
Htaccess Basic zu Digest wechseln

Hallo,

bisher hat es bei unseren Kunden ausgereicht Serververzeichnisse mit Htaccess Basic zu "schützen". Für den Zugriff haben wir folgendes verwendet:


ServicePointManager.Expect100Continue = false;

HttpWebRequest httpWebRequestForLogin = (HttpWebRequest)WebRequest.Create(url);

if (!proxy.Equals(""))
{
	httpWebRequestForLogin.Proxy = new WebProxy(proxy);
	httpWebRequestForLogin.Proxy.Credentials = new NetworkCredential(benutzername_proxy, passwort_proxy); //proxy anmeleddaten
}
else
{
	httpWebRequestForLogin.Proxy = new WebProxy();
}

byte[] parameterByteArray = Encoding.GetEncoding("ISO-8859-1").GetBytes("p1=test&p2=test2");

httpWebRequestForLogin.Credentials = new NetworkCredential(benutzernamea_htaccess, passwort_htaccess); //anmeldedaten htaccess
httpWebRequestForLogin.KeepAlive = false;
httpWebRequestForLogin.ContentType = "application/x-www-form-urlencoded";
httpWebRequestForLogin.Method = "POST";
httpWebRequestForLogin.ContentLength = parameterByteArray.Length;

Stream requestStream = httpWebRequestForLogin.GetRequestStream();
requestStream.Write(parameterByteArray, 0, parameterByteArray.Length);
requestStream.Close();

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequestForLogin.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.ASCII);
String result = streamReader.ReadToEnd();

Jetzt möchte aber ein anderer Kunde Htaccess Digest eingesetzt haben.

Ich habe jetzt gesucht ob man etwas besonderes in C# beachten muss. Z.B den Header explizit setzten. Ich Java muss man das unter Umstanden machen, so wie ich es gelesen habe.

Wie wir die .htaccess und .htpass Datei erstellen wissen wir und haben wir auch schon gemacht. Mit dem Quelltext oben funktioniert auch der Zugriff auf das Verzeichnis. Mich wundert es, dass man nicht extra die Art der Authentifizierung mitgeben muss, also Basic oder Digest.

Grüße und Danke

16.832 Beiträge seit 2008
vor 10 Jahren

Ich les jetzt keine Frage raus. Was genau ist das Problem, und was die Frage?

*
*neo* Themenstarter:in
299 Beiträge seit 2006
vor 10 Jahren

Hallo,

sorry, wenn ich das selbst so lese, geb ich dir Recht 😃

Meine Frage ist, ob etwas besonderes beachtet werden muss wenn ich umstelle auf Digest. Ob ich dem Header noch etwas mitgeben muss oder ihrgend welche Eigenschaften noch beim Request setzte muss.

Grüße und Danke

16.832 Beiträge seit 2008
vor 10 Jahren

Naja ehrlich gesagt ist das eine Frage, die Du Dir selbst beantworten kannst.
Wenn man nach C# Digest authentication sucht bekommt man unzählige Beispiele der Implementierung.

Probier's doch erst mal aus; vergleichs mit Deinem Code.
Dass wir Dir sagen / aufführen was man alles beachten muss betrifft im Prinzip [Hinweis] Wie poste ich richtig? Punkt 4 und dazu sind wir ja nicht da.

Allein das MSDN Beispiel zeigt, wie einfach (und unsicher) Basic und DigestAuth ist.
Denke das ist nicht zuviel verlangt.

*
*neo* Themenstarter:in
299 Beiträge seit 2006
vor 10 Jahren

Hallo,

aber genau dieses MSDN Beispiel hat mich verunsichert. Digest ist doch extra dafür, dass die Anmeldedaten nicht im Klartext übermittelt werden sondern in Kombination mit weiteren Merkmalen ein MD5 erstellt und an den Server gesendet wird.

Beim Zugriff auf ein mit Auth-Digest geschütztes Verzeichnis sendet der Webserver zusätzlich zur angeforderten Authentifizierung eine zufällig erzeugte Zeichen-Kombination. Der Browser fragt nun wie gehabt zuerst den User nach Benutzername und Passwort. Nun wird vom Browser eine Zeichenfolge erstellt welche aus Username, Passwort, angesurfter URL, der HTTP-Methode sowie der vom Webserver übermittelten zufälligen Zeichen-Kombination besteht. Von dieser zusammengesetzten Zeichenfolge wird nun ein (meist MD5-) Hash erzeugt und zum Webserver geschickt. Der Webserver wiederum macht genau das Selbe wie der Browser, bildet also die zusammengesetzte Zeichenfolge und den Hash daraus. Stimmt der vom Browser übermittelte Hash mit dem vom Server berechneten überein, ist der User Authentifiziert und erhält Zugriff. Bei jedem neuen Request wiederholt sich der Vorgang mit einer neuen zufälligen Zeichen-Kombination und damit einer neuen Zeichenfolge und neuem Hash.

Quelle hier..

Das heißt für mich dass meine Anfrage an den Server dazu führt, dass ich die besagte Zeichenkette bekomme und .Net demensprechend handelt und den MD5 baut und zurück gibt, wenn .Net sich an die Definition hält.

Implementiert .Net dieses Verfahren so nicht?

Ich verstehe, dass der Eindruck entstanden ist, das ich mich nicht mit dem Thema beschäftigt habe. Dem ist aber nicht so, wie meine Frage hier zeigt.

Grüße und Danke

*
*neo* Themenstarter:in
299 Beiträge seit 2006
vor 10 Jahren

Hallo,

noch ein Hinweis. Mir ist auch vollkommen bewusst, dass die Parameter im Klartext über die Leitung gehen wenn man nicht selbst tätig wird, egal ob Basic oder Digest. Diese haben wir bereits programmiertechnisch verschlüsselt.

Grüße

16.832 Beiträge seit 2008
vor 10 Jahren

MD5 ist keine Verschlüsselung, sondern ein simples Hashing und mehr als unsicher. Gibt genug Rainbowtables...
Nich ganz so unsicher wie im Klar-Klartext aber eben auch nicht, was heute als"sicher" definiert wird.

var myNetCreds = new NetworkCredential( myUser, myPass);

varmyCredCache = new CredentialCache( );
myCredentialCache.Add( myUri, "Digest", myNetCreds );

myWebRequest.PreAuthenticate = true;
myWebRequest.Credentials = myCredCache;

ist alles, was Digest ausmacht.
Probiers doch einfach mal aus und schau im Header, was gesendet wird.
Wirst sehen es ist so, wie Digest definiert wird...

*
*neo* Themenstarter:in
299 Beiträge seit 2006
vor 10 Jahren

Hallo,

ich weiß was der Unterschied zwischen Verschlüsselung und Hashwert ist 😃

Ich habe mir den Header angeschaut. Dort werden so oder so ähnlich die Daten aufgebaut:

Authorization: Digest username="xxx", realm="abc", nonce="T9ICNeRjBAA=4fbb28d42db044e182116ac27176e81d067a313c", uri="/www.domain.de/", algorithm=MD5, response="33f29dcc5d70b61be18eaddfca9bd601", qop=auth, nc=00000001, cnonce="ab96bbe39d8d776d"

Natürlich ist MD5 nicht mehr hundert Prozentig sicher, jedoch stellt sich da die Frage, und der Meinung war mein Prof auch immer, welcher Aufwand rechtfertig die Mittel. Digest ist wahrscheinlich dennoch besser als Basic. Da gibst du mir wahrscheinlich auch Recht.

Mir ging es wirklich nur darum, dass ich mich gewundert habe, dass ich von Basic einfach auf Digest wechseln konnte ohne Programmanpassung. Sondern der Quelltext oben, von mir, einfach funktioniert hat.

Danke