我正在尝试创建一个支持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)制作了类似的解决方案,然后我从远程计算机获得安全连接 . 所以它不是防火墙问题......
别人遇到过这个问题吗?有人能指出我所缺少的东西吗?