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

时间:2017-02-08 11:33:18

标签: asp.net-web-api azure-service-fabric

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

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

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

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

  1. WebAPI1已将Cert_A绑定到https:443。
  2. WebAPI2的Cert_A绑定到https:443(很好,它们是相同的证书)
  3. 尝试使用Cert_B更新WebAPI1。
  4. 发布到群集,尝试将Cert_B绑定到https:443
  5. 错误,因为已将另一个证书(Cert_A)绑定到https:443
  6. 我找到的唯一解决方法是将使用https:443上的Cert_A的每个系统脱机,并使用新的Cert_B重新发布所有应用。

    这是非常不可接受的(因为,我显然做错了)必须将系统的主要部分放下来更改证书。

    我有什么选择?

    Kestrel是否以不同方式管理https?我会通过做类似的事情来讨论类似的问题而不是在本地托管证书(即通过VM配置),我可以从keyvault请求最新的证书。我可以向Kestrel提供由密钥保险库(获取最新证书)的无版URL提供的证书。然后我想我需要做的就是让服务重新启动(例如发布升级)并且他们开始使用最新的证书。但是,据我所知,Kestrel not currently "supported"用于面向外部的Web服务器。

    我是最好的

    1. 使用gatewaty(例如Application Gateway)并在不同端口上托管我的所有WebListener服务,使用HTTPS保护
    2. 使用网关并使用Kestrel,不同或相同的端口
    3. 使用https安全网关并让我的服务在不同的端口上运行,而不必担心内部的https。
    4. 或者我的问题是否有一个简单的解决方案,我没有意识到?

      提前致谢!

      我为任何不正确的术语道歉,请纠正我。

1 个答案:

答案 0 :(得分:0)

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

  

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