【问题标题】:Using https only with spring cloud microservice instances仅对 Spring Cloud 微服务实例使用 https
【发布时间】:2018-02-17 12:28:53
【问题描述】:

为了在所有 Spring Cloud 微服务实例之间使用 https,我们可以生成一个 java 密钥库并使用它配置每个实例,如下所示:

server.ssl.key-store=server.jks
server.ssl.key-store-password=<pw>
server.ssl.keyStoreType=jks
server.ssl.keyAlias=tomcat
server.ssl.key-password=<pw>

IIUC 就设置 ssl 传输层,这就是我们需要做的所有事情?在相同微服务类型的所有实例中使用相同的密钥库是否可以/安全?例如,边缘服务器可以使用 Ribbon 在 microserviceA - instance1microserviceA - instance2microserviceA - instance3 之间进行负载平衡,并且这些都将具有相同的密钥库。

如果我们也有一个微服务 B,它是否也可以使用相同的密钥库而不影响安全性?

从管理/开发运营的角度来看,这是最简单的方法吗?

【问题讨论】:

    标签: java spring spring-boot https spring-cloud


    【解决方案1】:

    对于同一微服务的每个运行实例,SSL 证书应该是相同的,并且对于每个微服务(您的微服务 A 与微服务 B)都是唯一的。如果您曾经将服务移到硬件负载平衡器之后,那么原因就很明显了。

    当/如果您为服务-服务调用执行 X.509 客户端证书身份验证时,您将需要根据服务提供的证书对服务进行身份验证和授权。如果他们都出示相同的证书,那么您不能这样做。

    从 devOps 的角度来看,您以后可以通过集中存储证书来避免头疼 - 我们使用带有网站后端的 Spring Cloud Config Server - 并设置一个作业来每天检查证书的到期日期,所以部署一年左右后,您不会有不愉快的惊喜。

    我们为每个服务使用单独的密钥库/信任库,因为这符合我们的部署模型,但您可以使用具有多个服务别名的单个密钥库,因为其中的私钥可以有唯一的密码。但请注意,并非所有 java http 框架都能够通过别名选择密钥或支持不同的密钥库/密钥密码...

    【讨论】:

    • 谢谢安迪 - 很高兴知道 - 我也在研究将所有服务包装在 docker swarm 上运行的 docker 容器中 - 现在看起来好像我们可以用一个命令创建一个安全的覆盖网络并允许它管理 ssl。在此处发布后续跟进:stackoverflow.com/questions/46119863/…
    • 问题:在我的架构中,我将 nginx 作为 Spring Cloud Gateway 的代理,然后将请求转发到相应的微服务,我需要仅在网关上安装 ssl 还是在每个微服务上安装 ssl?我对此感到困惑。同样的 nginx 也在运行我的前端应用程序。
    猜你喜欢
    • 2018-03-28
    • 2017-06-19
    • 2019-07-04
    • 2018-10-25
    • 2019-03-22
    • 2018-04-18
    • 2016-12-09
    • 2021-10-23
    • 1970-01-01
    相关资源
    最近更新 更多