【问题标题】:When is it necessary to provide a CA file?何时需要提供 CA 文件?
【发布时间】:2020-07-26 09:59:16
【问题描述】:

我正在用 Go 编写一个使用 MongoDB 的服务器,并且我正在研究如何启用 SSL 以连接到数据库。我找到了几个解释如何添加 CA 文件的示例。像这样:

mongo.NewClientWithOptions(connectionString, mongo.ClientOpt.SSLCaFile(caFilePath))

我在 Atlas 上使用托管数据库,他们声明所有连接默认使用 SSL。这个answer 在另一个问题上显示了如何使用 Go 连接到 Atlas,但代码示例不使用 CA 文件。我也找不到可以使用的从 Atlas 下载 CA 文件的选项。

这让我有点困惑,并导致以下问题。何时需要提供如上所示的 CA 文件才能使用 SSL?如果 SSL 始终需要提供 CA 文件,我从哪里获取 CA 文件以连接到 Atlas 上的托管集群?

【问题讨论】:

    标签: database mongodb go ssl mongodb-atlas


    【解决方案1】:

    在启动 TLS 连接时,您始终需要 CA 证书来验证服务器。有时这已经安装在您的平台上并自动使用。当此类根证书不可用时,您必须在连接期间提供 CA 文件。 CA 文件用于验证服务器提供的证书。受信任的第三方提供此 CA,并且(可能通过一系列受信任的方)向服务器提供证书,因此您可以通过使用 CA 验证其证书来验证服务器是谁声称的。

    所有平台都附带一组初始根证书,可以验证众所周知的第三方生成的证书。您连接的 mongodb 服务器可能正在使用这样的证书,因此,您的操作系统证书可用于验证它。如果您有自己的 PKI 和您自己的 CA 未经第三方验证,那么您需要一个由您自己的 CA 签名的单独 CA 文件。然后您需要传递该 CA 文件来验证服务器,因为您的根证书将不包含您的自定义 CA。

    【讨论】:

      【解决方案2】:

      CA 文件指定您信任哪些自签名根证书,并且还可以包括中间证书颁发机构。

      当应用程序连接到服务器时,服务器将其证书作为握手的一部分发送。服务器的证书是数字签名的。

      为了检查服务器证书是否被篡改,请查阅颁发者的证书,其中包含可用于验证数字签名的公钥。

      如果颁发者是一个中间 CA,那么它的证书也由另一个 CA 签名,因此将参考 CA 的证书来验证中间证书上的签名。

      这个过程一直持续到链到达一个自己签名的证书。这是根证书。由于它自己签名,因此您必须明确表明您信任它才能信任整个链,包括所连接的服务器。

      这里的底线是您需要在以下情况下提供 CA 文件:

      • 您关心验证所连接服务器的身份(即防止中间人攻击),并且
      • 根证书不会通过包含在本地信任存储中而被隐式信任

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多