Mono HttpListener客户端证书

我使用HttpListener创建了一个服务器。 它在没有SSL的情况下工作得很好,但是使用SSL时会发生奇怪

我已经使用httpcfg安装了证书,甚至使用我自己的程序,它安装正确,监听器启动并提供HTTPS请求,但始终要求提供客户端证书。

它不会发生在Windows / .net上,只有Linux / mono(我使用的是ver 3.4.0)并且非常烦人,我不希望每次尝试登录客户端时都会询问用户证书。

这是单声道错误还是有任何方法可以禁用客户端证书协商?

谢谢。

我遇到了同样的问题。 我发现这是在Mono中硬编码的。 在mcs / class / System / System.Net / HttpConnection.cs中 ,当调用SslServerStream的构造函数时 ,您会注意到requestClientCertificate被硬编码为true

我遇到了这个试图将这个硬编码值改为false PR ,但由于“我宁愿不为另一个硬编码值更改一个硬编码值”,因此它目前被半拒绝。

[更新]我刚才意识到 (OP)是PR的作者:)

[更新9/21/2016]看起来这个问题仍然受到欢迎。 如果它对任何人都有帮助,我们很久以前就用nginx作为反向代理,当时我们无法解决这个问题。 我很高兴我们做到了,而且应该早点做到。 它比Mono更快地处理SSL / TLS,并允许我们更加谨慎地控制加密套件并及时了解安全补丁。

我正在关注尚未发布的Mono 4.6 。 通过对TLS的彻底检查以及在运行时插入备用实现的能力,这可能为我们提供了一条前进的道路而不使用nginx反向代理。

唯一的选择(仍然..)有:

如果使用最新的Mono版本的源代码,请使用Gusman的pull请求#1或#2 (取决于您的Mono版本)作为解决方法,对于高效环境应该是正常的。

Mono v4.2.3.4的示例:

 echo -e -n "83c83\n< \t\t\t\tSslServerStream ssl_stream = new SslServerStream (new NetworkStream (sock, false), cert, false, true, false);\n---\n> \t\t\t\tSslServerStream ssl_stream = new SslServerStream (new NetworkStream (sock, false), cert, false, false, false);\n" > nocerts.diff tar xvjf mono-4.2.3.4.tar.bz2 cd mono-4.2.3.4 patch ./mcs/class/System/System.Net/HttpConnection.cs ../nocerts.diff ./configure --prefix=/usr make make install 

或者使用没有客户端证书(即v3.10.0)的最新Mono版本。