gpt4 book ai didi

ssl - 如何在 mkbundle 的 Mono 应用程序中使用 SSL 和 HttpListener

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:56 24 4
gpt4 key购买 nike

我有一个使用 Mono 构建的 .NET 应用程序,我已使用 mkbundle 将其捆绑到 native (Linux) 可执行文件中。这样一来,最终用户就无需自己动手安装 Mono。

应用程序使用 ServiceStack,它在底层使用 HttpListener。我需要通过支持 SSL 的 HTTP 端点公开 Web 服务。

通常,您会在配置期间运行类似httpcfg -add -port 1234 -p12 MyCert.pfx -pwd "MyPass" 的命令(这实际上是将证书复制到特定路径), HttpListener 会自动将证书绑定(bind)到端口。

因此 HttpListener 在运行时从特定路径加载证书。

该路径是硬编码的吗?或者有什么方法可以告诉它使用来自另一个位置的证书,因为最终用户不会安装 Mono?

最佳答案

是的,HttpListener 希望在其中查找证书的路径是预定义的,不能由用户以编程方式或通过配置文件指定。 Mono EndPointListener 类将查找路径:

~/.config/.mono/httplistener/

HttpListener code :

string dirname = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
string path = Path.Combine (dirname, ".mono");
path = Path.Combine (path, "httplistener");

正如您所注意到的,这与 httpcfg 将证书复制到的路径相同。

即使您正在使用 mkbundle,这仍然是 HttpListener 期望从中读取证书的地方,无论是否安装了 Mono 运行时。

在您的应用程序启动时,您应该:

  • 检查目录是否存在,并根据需要创建
  • 将您的证书和 key 从应用程序中的嵌入式资源写入该路径。 PouPou's answer here显示 HttpCfg.exe 使用的方法。

因此消除了运行 httpcfg 的要求,您将有效地将该功能直接构建到您的应用程序中。


Does Mono perform any validation of the certificates it loads from there for HttpListener? i.e., will it expect to find the issuer's certificate in the certificate store?

我不确定 Mono 是否在创建监听器时或在每次连接请求时检查证书库中的有效相应颁发者证书。但是,您可以自己将 CA 证书添加到证书存储区,或导入所有标准 Mozroot 证书。

Mozroots is here 的完整源代码.这显示了如何导入 CA 证书。

Is the path to the certificate store also hard-coded?

证书存储应通过 X509StoreManager 提供程序进行管理。

关于ssl - 如何在 mkbundle 的 Mono 应用程序中使用 SSL 和 HttpListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23243224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com