首页 文章

Mono HttpListener客户端证书

提问于
浏览
9

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

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

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

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

谢谢 .

2 回答

  • 0

    我'm having the same problem. What I'已经发现,这是在Mono中硬编码的 . 在mcs/class/System/System.Net/HttpConnection.cs中,当调用constructor of SslServerStream时,您会注意到 requestClientCertificate 被硬编码为 true .

    我遇到this PR试图将此硬编码值更改为 false ,但由于"I rather not change one hardcoded value for another hardcoded value.",它目前被半拒绝

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

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

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

  • 2

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

    如果使用最新的Mono版本的源代码,请使用Gusman的拉取请求#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版本 .

相关问题