如何为微服务创建公钥存储?

时间:2017-03-05 11:49:55

标签: security docker microservices pki ca

我在docker环境中实现了一组微服务。并且这些服务中的每一个使用JWT令牌彼此通信。当服务A呼叫服务B

  1. 服务A,使用他的私钥签署令牌并传递给服务 乙
  2. 服务B,从公钥存储中获取ServiceA的公钥并验证令牌
  3. 公钥/私钥生成过程由微服务本身完成,然后它们将公钥传递给公钥存储。所以公钥存储必须做的唯一事情,

    1. 存储按服务发送的公钥
    2. 根据要求向服务发送正确的公钥
    3. 我要做的是与此图中显示的内容类似。

      I got this image from

      我从上面获得了上面的图像:https://www.youtube.com/watch?v=dBdZrw2pPvc&t=462s

      所以我的问题是,这种公钥存储是否有任何标准实现?如果是这样,他们是什么?

2 个答案:

答案 0 :(得分:4)

披露:我是Conjur的首席技术官。

考虑工作流程:

  1. 服务A的容器启动。
  2. 它会生成一个新密钥对。
  3. 它将公钥提交给公钥存储。
  4. 公钥存储区接收公钥。
  5. 公钥存储将其收到的公钥与身份" service-a"相关联。
  6. 服务A向服务B签署请求。
  7. 服务B向密钥存储区询问服务A的已知公钥。
  8. 密钥存储区提供公钥。
  9. 服务B验证签名是否与其中一个密钥匹配。
  10. 公钥存储必须确保:

    • 以防篡改的方式存储公钥。
    • 以防篡改的方式将每个公钥与服务标识相关联。
    • 为管理员提供一些操作密钥库的方法(例如,展开死容器的密钥)。
    • 记录发生的所有事情。

    但另外还有一点很难。在步骤(5)中,当密钥存储器接收到服务A的密钥时,它需要验证密钥实际上来自服务A,而不是来自冒名顶替者。换句话说,它必须验证请求。

    如何执行此操作取决于基础结构的详细信息。如果您使用的是原始Docker(而不是Kubernetes),则可以使用服务器上的代理将容器的IP地址与计算机上的容器列表(docker ps)相关联。这将告诉您容器的图像,它应该告诉您服务的身份。

    这个问题有很多细微之处,解决方案对于每个容器环境都有所不同。

答案 1 :(得分:1)

如果安全性不重要:

如果安全很重要:

老实说,有更多的选择,但这些是DevOps社区最着名和最严格的一些选项。