zmi*_*mit 9 c# https httplistener xamarin.ios ios
我使用HttpListenerMonoTouch 实现了一个非常简单的Web服务器.一切都很好.现在我需要添加HTTPS支持.我试着按照步骤进行操作
但我不知道在MonoTouch中设置证书的位置.只添加前缀"https://*:443"没有帮助,因为没有连接是可能的,并且不会抛出任何异常.
根据http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx,这可能是因为必须指定服务器证书("您可以使用配置服务器证书和其他侦听器选项HttpCfg.exe").
我怎么能在MonoTouch中做到这一点?
这个问题问得好.在某些情况下,例如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;
Run Code Online (Sandbox Code Playgroud)
因此,解决方案是创建相同的目录结构(它可能,因为它将指向Documents目录下)并使用端口复制.cer文件(二进制DER编码的证书)和.pvk文件(以makecert创建的格式的私钥) number作为文件名.
有了这些文件,您应该能够启动HttpListener并加载处理SSL请求所需的证书和私钥.