2012-11-14 13 views
8

Ich implementierte einen sehr einfachen Webserver mit dem HttpListener in MonoTouch. Alles funktioniert gut. Jetzt muss ich HTTPS-Unterstützung hinzufügen. Ich habe versucht, die Schritte vonHttpListener mit HTTPS auf MonoTouch

Httplistener with https support

zu folgen, aber ich weiß nicht, wo die Zertifikate in Monotouch einzustellen. Das Hinzufügen des Präfixes "https: // *: 443" hilft nicht, da keine Verbindungen möglich sind und keine Ausnahmen ausgelöst werden.

Laut http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx kann dies daran liegen, dass ein Serverzertifikat angegeben werden muss ("Sie können Serverzertifikate und andere Listeneroptionen mithilfe von HttpCfg.exe konfigurieren").

Wie kann ich es in MonoTouch tun?

Antwort

7

Das ist eine sehr gute Frage. In einigen Fällen, wie für HttpListener, benötigt .NET Tools oder .config-Dateien (mit System.Configuration), um die Konfiguration einer Anwendung zu optimieren. In vielen Fällen gibt es API, die den gleichen Zweck erreichen, aber nicht immer (und nicht in diesem Fall).

Die Lösung besteht darin, sich den Quellcode von Mono anzusehen, um zu sehen, was das HttpCfg.exe-Tool für die Anwendung erwartet. Von github:

string dirname = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData); 
string path = Path.Combine (dirname, ".mono"); 
path = Path.Combine (path, "httplistener"); 
string cert_file = Path.Combine (path, String.Format ("{0}.cer", port)); 
if (!File.Exists (cert_file)) 
    return; 
string pvk_file = Path.Combine (path, String.Format ("{0}.pvk", port)); 
if (!File.Exists (pvk_file)) 
    return; 
cert = new X509Certificate2 (cert_file); 
key = PrivateKey.CreateFromFile (pvk_file).RSA; 

So ist die Lösung ist die gleiche Verzeichnisstruktur (es ist möglich, da es unter dem Documents Verzeichnis zeigen wird) zu erstellen und kopieren Sie die .cer Datei (binäres DIE-kodiertes Zertifikat) und die .pvk-Datei (die ist der private Schlüssel in dem Format, das makecert erstellt) mit der Portnummer als Dateiname.

Mit diesen Dateien sollten Sie in der Lage sein, die HttpListener zu starten und laden Sie das erforderliche Zertifikat und privaten Schlüssel benötigt, um SSL-Anfragen zu behandeln.

+1

Damit die .cer und .pvk-Dateien funktionieren, müssen sie im /. Config/.mono/httplistener abgelegt sein. – zmit

+0

Vielen Dank, dass Sie diese Nachricht gepostet haben !! Ich nehme an, du hast das in MonoTouch funktioniert? Ich versuche es mit Monodroid zu machen. Ich kann nicht herausfinden, wie man die cert- und pvk-Dateien an den richtigen Ort bringt. Ich fügte sie als "Assets" hinzu, aber das schien nicht zu funktionieren. :-( – exvance

+0

Ist es nur ich oder ist dies der Zweck von HTTPS, da es nicht so schwer wäre, einfach den privaten Schlüssel aus dem Bundle oder aus dem Dateisystem herunterzuladen? – borrrden