2012-11-14 22 views
8

我使用MonoTouch中的HttpListener實現了一個非常簡單的Web服務器。一切工作正常。現在我需要添加HTTPS支持。我試圖按照步驟從MonoTouch上帶有HTTPS的HttpListener

Httplistener with https support

,但我不知道在哪裏設置證書中的MonoTouch。只需添加前綴「https:// *:443」就沒有幫助,因爲沒有可能的連接並且不會引發異常。

根據http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx,這可能是因爲必須指定一個服務器證書(「您可以使用HttpCfg.exe配置服務器證書和其他偵聽器選項」)。

我該如何在MonoTouch中做到這一點?

回答

7

這是一個非常好的問題。在某些情況下,如HttpListener,.NET需要工具或.config文件(使用System.Configuration)來調整應用程序的配置。在許多情況下,API都達到相同的目的,但並不總是(在這種情況下)。

解決方案是查看Mono的源代碼,以查看期望HttpCfg.exe工具爲應用程序設置的內容。從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; 

因此,解決辦法是創建相同的目錄結構(這是可能的,因爲它會在Documents目錄下點)和複製.cer文件(二進制DER編碼的證書)和.pvk文件(是makecert創建的格式的私鑰),端口號作爲文件名。

使用這些文件後,您應該能夠啓動HttpListener並使其加載處理SSL請求所需的必需證書和私鑰。

+1

爲了使它工作, .CER和 .pvk文件必須駐留在<應用程序的文件目錄> /。配置/ .mono/httplistener – zmit

+0

感謝張貼這個!我假設你在MonoTouch中有這個工作?我試圖讓它在Monodroid上工作。我無法弄清楚如何將cert和pvk文件放在正確的位置。我將它們添加爲「資產」,但似乎並不奏效。 :-( – exvance

+0

只是我還是這樣做打破了HTTPS的目的,因爲從私有密鑰或文件系統中簡單地下載私鑰是不是很難? – borrrden