是的,期望在其中找到证书的路径HttpListener
是预定义的,并且不能由用户以编程方式或通过配置文件指定。MonoEndPointListener
类将寻找路径:
~/.config/.mono/httplistener/
HttpListener 代码:
string dirname = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
string path = Path.Combine (dirname, ".mono");
path = Path.Combine (path, "httplistener");
正如您所注意到的,这是将httpcfg
证书复制到的相同路径。
即使您正在使用mkbundle
,这仍然是HttpListener
期望从中读取证书的地方,无论是否安装了 Mono 运行时。
在您的应用程序启动中,您应该:
- 检查目录是否存在,并根据需要创建
- 将您的证书和密钥从应用程序中的嵌入式资源写入该路径。PouPou 的回答在这里显示了 HttpCfg.exe 使用的方法。
因此,消除了 run 的需求httpcfg
,您将有效地将该功能直接构建到您的应用程序中。
Mono 是否对其从那里为 HttpListener 加载的证书执行任何验证?即,它会期望在证书存储中找到颁发者的证书吗?
我不确定 Mono 是否在创建侦听器时或在每次连接请求时检查证书存储中的有效相应颁发者证书。但是,您可以自己将 CA 证书添加到证书存储中,或导入所有标准Mozroot
证书。
完整的源代码在Mozroots
这里。这显示了如何导入 CA 证书。
证书存储的路径是否也是硬编码的?
证书存储应通过X509StoreManager
提供程序进行管理。