Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Fragen zum Versand einer mit SSL verschlüsselten SOAP Nachricht an einen Webserver
ToDieFoR
myCSharp.de - Member



Dabei seit:
Beiträge: 7
Herkunft: Gießen

Themenstarter:

Fragen zum Versand einer mit SSL verschlüsselten SOAP Nachricht an einen Webserver

beantworten | zitieren | melden

Hallo,

ich habe folgendes Problem:

Ich möchte gerne eine SOAP Nachricht per HTTPS (und SSL) von meinem Programm an einen Webservice senden. Bisher habe ich die SOAP-Nachricht nur mit HTTP gesendet und dafür die HttpWebRequest Klasse benutzt. Der Code dazu sieht wie folgt aus:


            byte[] byteArray = Encoding.UTF8.GetBytes(soapMsg);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myurl.de");                        

            request.Credentials = CredentialCache.DefaultCredentials;
            request.Headers.Add("SOAPAction", "");
            request.Method = "POST";
            request.ContentLength = byteArray.Length;
            request.ContentType = "application/soap+xml; charset=utf-8";

            using (Stream dataStream = request.GetRequestStream())
            {
                dataStream.Write(byteArray, 0, byteArray.Length);

                log.Debug("Sending soap message to eCM Webservice ... ");
            }
            WebResponse response = null;
            try
            {
                response = request.GetResponse();
            }
            catch (WebException)
            {
                throw new CreatingOutputException("Keine Antwort der eCM-Schnittstelle nach unserer SOAP-Anfrage bekommen!");
            }
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);

            string responseFromServer = null;
            using (Stream dataStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(dataStream);
                responseFromServer = reader.ReadToEnd();

                log.Debug("eCM Webservice returned this response: \n\n" + responseFromServer + "\n\n");

                reader.Close();
                response.Close();
            }

Das hat auch prima funktioniert. Allerdings habe ich beim Versand über HTTPS ein paar Verständnisfragen:

1. Die WebRequest-Klasse erstellt mir ja ein HttpWebRequest Objekt, wenn es sich bei der angegebenen URL um http:// oder https:// handelt.
Ich schreibe die Daten dann über einen Stream raus und diese werden somit an den Webserver gesendet.
Wenn ich jetzt Daten per HTTPS sende, muss ich die Daten vor dem Versenden erst noch verschlüsseln, oder übernimmt diese Aufgabe das HttpWebRequest Objekt?
Ich habe bei der MSDN noch etwas über einen SslStream-Klasse gelesen.
Ich hätte jetzt gedacht, dass ich einen SslStream erzeuge und diesen dann an das HttpWebRequest Objekt übergebe, aber ich habe dazu keine Möglichkeit gefunden.

2. Wie läuft das technisch mit der Überprüfung des Zertifikates ab? Um den Server als gültig anzuerkennen muss ich doch das übermittelte Zertifikat prüfen. Kann ich in der HttpWebRequest Klasse dazu Einstellungen (z.B. anhand von Properties) vornehmen, die diese Prüfung für mich durchführen. Oder brauche ich ein Hilfsobjekt? Wie setzt man diese Prüfung programmatisch um?

Vielen Dank schon mal im Vorraus für jegliche Hilfe :)

Liebe Grüße,
Björn
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 550
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

Klemm dich mit dem Fiddler dazwischen, dann kannst du sehen, ob du mehr tun musst als nur "https://" in die Adresse reinschreiben (soll heißen, wenn du noch lesen kannst, was da transportiert wird musst du dich selbst kümmern)

Fiddler arbeitet als WebProxy, kann also bei Lokalen anfragen u.U. kein Ergebnis liefern.

Ich vermute allerdings, dass die SSL Aushandlung und was da alles dran hängt automatisch passiert.
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
private Nachricht | Beiträge des Benutzers
ToDieFoR
myCSharp.de - Member



Dabei seit:
Beiträge: 7
Herkunft: Gießen

Themenstarter:

beantworten | zitieren | melden

Hallo Grumbler85,

danke für deine Hilfe! Bis ich mich jetzt allerdings in Fiddler eingearbeitet habe, gehen wieder 1-2 tage ins Land.

Hat noch niemand in diesem Forum eine SOAP-Nachricht an einen Webservice gesendet, die via HTTPS und SSL verschlüsselt sein soll?

Es muss mir doch jemand sagen können, ob die HttpWebRequest Klasse das alles automatisch macht. Wenn ja, was muss ich konfigurieren?

Wenn nein, wie wirds gemacht?

Danke für Eure Hilfe!

Grüße,
Björn
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

bitte benutze in Zukunft erstz die Forumssuche. Da hättest Du z.B. Erste gehversuche mit WebRequest, HTTPS und Zertifikaten und Verständnisfrage HTTPS Verbindung gefunden.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
ToDieFoR
myCSharp.de - Member



Dabei seit:
Beiträge: 7
Herkunft: Gießen

Themenstarter:

beantworten | zitieren | melden

Hallo MarsStein,

ich habe mir diese beiden Artikel durchgelesen, allerdings haben sie mir bei meinem Problem leider nicht geholfen.

Aber vielleicht kennst du ja die Antwort auf meine Frage? :D
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo ToDieFoR,

es ist wie ich in dem einen Threads schrieb:
Zitat von MarsStein
Wenn Du mit https erfolgreich eine Verbindung aufbaust, so ist diese auf jeden Fall verschlüsselt
Um die Verschlüsselung brauchst Du Dich also nicht selbst zu kümmern.
Wenn das Zertifikat fehlerhaft/ungültig ist (der Fall wo ein Browser per Dialog zurückfragt), dann kannst Du das mit der RemoteCertificateValidationCallback regeln, wie in dem anderen Thread beschrieben.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers