Service Fabric 多个 SSL 安全 WebAPI 和证书翻转

Posted

技术标签:

【中文标题】Service Fabric 多个 SSL 安全 WebAPI 和证书翻转【英文标题】:Service Fabric multiple SSL secured WebAPIs and certificate rollover 【发布时间】:2017-06-26 00:05:06 【问题描述】:

我的集群中有两个 WebAPI 应用程序。两个应用程序都在每个节点上运行。他们都使用 asp.net core 和 Weblistener。按照here 的建议,我已将它们设置为分别在端口 80 和 443 上侦听 http 和 https。

Https 使用相同的证书进行保护,并使用 er 端点绑定 (?) 进行设置,如 here 所讨论的。我使用自签名证书可以正常工作,但是在将证书更改为适当的证书时出现了问题。有效模拟证书翻转。

我将新证书添加到密钥保管库并将其部署到集群。当使用新证书引用重新发布我的应用程序时,它会失败并出现this 错误ConfigurePortCertificate: httpsPort=443, certStoreName My, certfindvalue SSLCertFingerPrint, error AlreadyExists。现在哪种有意义..

由于两个应用程序都在每个节点上运行,并且我们尝试更新其中一个,因此会发生以下情况:

    WebAPI1 将 Cert_A 绑定到 https:443。 WebAPI2 将 Cert_A 绑定到 https:443(这很好,它们是相同的证书) 尝试使用 Cert_B 更新 WebAPI1。 发布到集群,尝试将 Cert_B 绑定到 https:443 错误,因为不同的证书 (Cert_A) 已绑定到 https:443

我找到的唯一解决方法是让每个在 https:443 上使用 Cert_A 的系统脱机,并使用新的 Cert_B 重新发布所有应用程序。

不得不关闭系统的主要部分来更改证书是非常不可接受的(例如,我显然做错了什么)。

我有什么选择?

Kestrel 管理 https 的方式不同吗?我是否会通过执行类似...而不是在本地托管证书(即通过 VM 配置)来遇到类似问题,我可以从 keyvault 请求最新的证书。我可以为 Kestrel 提供一个证书,该证书由一个未版本化的 URL 提供给密钥库(它获取最新的证书)。然后我想我需要做的就是让服务重新启动(例如发布升级)并且他们将开始使用最新的证书。不过,我知道 Kestrel 是 not currently "supported" 用于面向外部的 Web 服务器。

我会不会是最好的呢

    使用网关(例如应用程序网关)并将我的所有 WebListener 服务托管在不同的端口上,并使用 HTTPS 进行保护 使用网关并使用 Kestrel,端口不同或相同 使用 https 安全网关,让我的服务在不同的端口上运行,不用担心内部的 https。

或者是否有一个我没有意识到的简单解决方案?

提前致谢!

对于任何不正确的术语,我深表歉意,请纠正我。

【问题讨论】:

【参考方案1】:

ASF 中内置了一个reverse proxy。它可以配置为使用 SSL 并执行 SSL 终止。这是一个非常简单的解决方案。

http(s):反向代理可以配置为接受 HTTP 或 HTTPS 交通。对于 HTTPS 流量,SSL 终止发生在 反向代理。由反向代理转发到的请求 集群中的服务通过 http。请注意,HTTPS 服务是 目前不支持。

【讨论】:

你在开玩笑吧!我要试一试,谢谢:) 我试过这个,它破坏了一切。我的 Service Fabric 刀片上没有明显的更多信息,但收到“集群配置失败”:(有什么想法吗? 上面还写着Status: Upgrade service unreachable 不管那是什么意思。

以上是关于Service Fabric 多个 SSL 安全 WebAPI 和证书翻转的主要内容,如果未能解决你的问题,请参考以下文章

Service-Fabric 绑定到多个端点

从自定义域使用反向代理和 SSL 访问 Service Fabric

如何在 Azure Service Fabric 中的自托管 Web API 上配置 SSL

无法通过 VSTS 发布到安全的 Service Fabric 群集

Service Fabric 具有不同 ContractDescriptions 的多个 ServiceEndpoint

在 Service Fabric Mesh 中公开多个服务