如何使用ASP.NET 5 Kestrel

时间:2016-07-01 06:26:22

标签: https azure-service-fabric kestrel-http-server

我有一个具有无状态服务的Service Fabric,遵循网关模式侦听HTTP请求,然后将它们转发到集群中的业务逻辑。这很好用。现在我尝试添加HTTPS支持。网关项目正在使用ASP.NET Core 1.0(在NET461上)和我在Service Fabric SDK 5.1.150,Visual Studio 2015 Update 3.如果我手动启动网关项目(设置为启动项目),那么我可以点击HTTPS端点,但是当我通过群集运行它时,端口打开,但它立即关闭,我得到" localhost意外关闭连接。"在Chrome中。这是我的启动代码:

                builder
                 .UseKestrel(options => 
                 {
                     options.NoDelay = true;
                     options.ThreadCount = 1024;

                     if (sslCert != null)
                     {
                         options.UseHttps(sslCert);
                     }
                 })
                 .UseUrls("http://*:5402", "https://*:5403")
                 .UseContentRoot(System.IO.Directory.GetCurrentDirectory())
                 .UseStartup<Startup>()
                 .Build()
                 .Run();

可能唯一的是我尝试使用Kestrel,但我使用了这个样本(除了样本没有做HTTPS)。 sslCert变量设置,如果我将此项目作为VS中的启动项目运行,那么我可以处理HTTPS请求。

我已经在集群中配置了端点,但它似乎没有什么区别,如果我把它留出来,我仍然可以点击tcp端口。有什么建议/样品吗?

2 个答案:

答案 0 :(得分:1)

我假设您引用了安装在本地证书库中的证书(例如LOCAL_MACHINE)。如果是这种情况,请确保您已为私钥配置了正确的权限。

简而言之,私钥上的默认ACL不允许NETWORK SERVICE帐户访问证书密钥。当Azure安装证书时,只有SYSTEM和Administrators被授予对私钥的完全控制和读取权限。所有Service Fabric服务都在NETWORK SERVICE下运行,因此无法访问私钥。

解决方案是添加NETWORK SERVICE并授予Read(是,只读,没有完全控制)权限,如下所示:

enter image description here

Happy Service Fabric编程!

答案 1 :(得分:0)

我可能错了,但在撰写本文时(2016年7月),我并不认为Kestrel做了https。

我采用的方法是使用应用程序网关终止http和https,然后转发到服务结构内的HTTP套接字。

我知道它没有明确回答你的问题,但我认为这是正确的解决方案。