這是一個非常好的問題。在某些情況下,如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請求所需的必需證書和私鑰。
爲了使它工作, .CER和 .pvk文件必須駐留在<應用程序的文件目錄> /。配置/ .mono/httplistener –
zmit
感謝張貼這個!我假設你在MonoTouch中有這個工作?我試圖讓它在Monodroid上工作。我無法弄清楚如何將cert和pvk文件放在正確的位置。我將它們添加爲「資產」,但似乎並不奏效。 :-( – exvance
只是我還是這樣做打破了HTTPS的目的,因爲從私有密鑰或文件系統中簡單地下載私鑰是不是很難? – borrrden