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 和证书翻转的主要内容,如果未能解决你的问题,请参考以下文章
从自定义域使用反向代理和 SSL 访问 Service Fabric
如何在 Azure Service Fabric 中的自托管 Web API 上配置 SSL
无法通过 VSTS 发布到安全的 Service Fabric 群集
Service Fabric 具有不同 ContractDescriptions 的多个 ServiceEndpoint