我非常喜欢 AWS Cloud Map(AWS 中的服务发现)。它与 AWS DNS 集成,使服务发现变得非常简单。只需注册服务实例,您就可以通过常规 DNS 解析发现该服务。例如,curl http://hello-world.production
连接到 hello-world 服务的生产实例。太棒了。
我的问题是我想使用 HTTPS 保护微服务之间的通信。但是,我该如何为 hello-world.production 之类的东西生成证书/密钥?私有 CA 是唯一的选择吗?我知道 AWS 支持这一点,但我是否需要将我的私有 CA 的根证书注入到我的所有微服务中?理想情况下,我会避免运行私有 CA。如果这是最好的方法,有没有办法确保我所有的内部服务都拥有 CA 的根证书?
谢谢!
答案1
是的。您这种情况下的 CA 必须是私有的。
如果您仔细想想,我还可以有一个名为 的服务hello-world.production
。由于公共 CA 位于大多数/所有客户端的信任锚存储中,因此如果公共 CA 向您和我颁发证书,则连接的客户端将不知道他们正在连接到谁。公共 CA 只能向全局唯一的实体颁发证书。商业 CA 通常依靠 DNS 或电子邮件地址(取决于证书使用情况)的全局唯一性来实现这一点。
另一方面,您的私有 CA 只会位于您的客户端的信任锚存储中,并且只会向您的实例颁发证书hello-world.production
。如果您的客户端以某种方式尝试连接到我的实例,它将失败,因为我没有您的客户端信任的私有 CA 颁发的证书。
有多种方法可以将证书分发到客户端的信任锚存储:
- Windows 有组策略;
- 将其添加到 Docker 镜像中;
- 通过 Microsoft SCCM 分发;
- 使用开源配置管理工具(Ansible/Puppet/Chef等)进行分发;
如何分配取决于您的场景。
如果您不想麻烦地运行私有 CA,您可以考虑托管私有 CA。AWS、Digicert、Entrust 和 Sectigo 提供此项服务,但需付费。