我正在尝试创建一个支持SSL的简单Web服务器 . 我正在尝试使用HttpListener . 这就是我所拥有的:

  • 我制作了根CA证书并将其存储在“受信任的根证书颁发机构”存储中

  • 我从根证书中导出了服务器身份验证证书,并将其存储在个人存储中

  • 我使用'netsh http add sslcert ...' -command将证书绑定到我的应用程序和端口 .

  • 我还将我的根CA证书存储在另一台计算机的受信任的根证书授权存储中 .

这是我使用的一些代码:

private void StartServer()
{
    HttpListener server = new HttpListener();
    server.Prefixes.Add("http://+:8080/");
    server.Prefixes.Add("https://+:8081/");
    server.Start();
    server.BeginContext(HandleRequestCallback, server);
}

private void (HandleRequestCallback(IAsyncResult ar)
{
    HttpListener server = ar.AsyncState as HttpListener;
    server.BeginGetContext(HandleRequestCallback, server); // Start listening again.
    HttpListenerContext context = server.EndGetContext(ar);
    HttpListenerRequest request = context.Request;
    ProcessRequest(request);
}

这是有效的:

  • 来自本地计算机的普通http请求

  • 来自本地计算机的安全https请求(我在Chrome中获得绿色锁定符号)

  • 来自远程计算机的普通http请求

什么不起作用是来自远程机器的安全https请求 . 连接只是超时 . VS中的调试显示HandleRequest方法没有被命中 . 还在玩Fiddler,在这种情况下我看不到任何传入的网络流量 .

我也使用TcpListener(和SslStream)制作了类似的解决方案,然后我从远程计算机获得安全连接 . 所以它不是防火墙问题......

别人遇到过这个问题吗?有人能指出我所缺少的东西吗?