2012-11-14 11 views
8

Zaimplementowałem bardzo prosty serwer WWW przy użyciu HttpListener w MonoTouch. Wszystko działa dobrze. Teraz muszę dodać obsługę HTTPS. Starałem się wykonać kroki odHttpListener z HTTPS na MonoTouch

Httplistener with https support

ale nie wiem gdzie ustawić certyfikaty MonoTouch. Dodanie przedrostka "https: // *: 443" nie pomaga, ponieważ nie są możliwe żadne połączenia i nie są zgłaszane żadne wyjątki.

Według http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx może to wynikać z konieczności określenia certyfikatu serwera ("Można skonfigurować certyfikaty serwera i inne opcje programu nasłuchującego za pomocą narzędzia HttpCfg.exe").

Jak mogę to zrobić w MonoTouch?

Odpowiedz

7

To jest bardzo dobre pytanie. W niektórych przypadkach, jak na przykład HttpListener, .NET wymaga narzędzi lub plików .config (przy użyciu System.Configuration) w celu ulepszenia konfiguracji aplikacji. W wielu przypadkach API osiąga ten sam cel, ale nie zawsze (a nie w tym przypadku).

Rozwiązanie polega na sprawdzeniu kodu źródłowego Mono, aby zobaczyć, czego oczekuje się od ustawienia narzędzia HttpCfg.exe dla aplikacji. Od 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; 

Więc rozwiązaniem jest stworzenie takiej samej struktury katalogów (jest to możliwe, ponieważ będzie on wskazać w katalogu Documents) i skopiować plik .cer (binarny certyfikatu DER kodowane) oraz plik .pvk (co jest kluczem prywatnym w formacie, który tworzy makecert) z numerem portu jako nazwą pliku.

Po zainstalowaniu tych plików powinno być możliwe uruchomienie HttpListener i załadowanie wymaganego certyfikatu i klucza prywatnego wymaganych do obsługi żądań SSL.

+1

Aby to działało, pliki .cer i .pvk muszą znajdować się w /. Config/.mono/httplistener – zmit

+0

Dzięki za zamieszczenie tego! Zakładam, że działasz w MonoTouch? Próbuję uruchomić go na Monodroid. Nie mogę wymyślić, jak uzyskać pliki cert i pvk we właściwym miejscu. Dodałem je jako "Zasoby", ale wydawało się, że to nie działa. :-( – exvance

+0

Czy to tylko ja, czy to pokonuje cel HTTPS, ponieważ nie byłoby tak łatwo po prostu pobrać klucz prywatny z pakietu lub poza system plików? – borrrden