什么时候需要提供CA文件?
When is it necessary to provide a CA file?
我正在用 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 上的托管集群?
CA 文件指定您信任哪些自签名根证书,并且还可以包括中间证书颁发机构。
当应用程序连接到服务器时,服务器会发送其证书作为握手的一部分。服务器的证书经过数字签名。
为了检查服务器证书是否未被篡改,将查询颁发者的证书,其中包含可用于验证数字签名的 public 密钥。
如果颁发者是中间 CA,则其证书也由另一个 CA 签名,因此将参考 CA 的证书来验证中间证书上的签名。
这一直持续到链到达一个由它自己签名的证书。这是根证书。由于它会自行签名,因此您必须明确表明您信任它才能信任整个链,包括所连接的服务器。
这里的底线是您需要在以下情况下提供 CA 文件:
- 您关心验证所连接服务器的身份(即防止中间人攻击),并且
- 根证书不会通过包含在本地信任库中而被隐式信任
在启动 TLS 连接时,您始终需要 CA 证书来验证服务器。有时这已经安装在您的平台上并自动使用。当此类根证书不可用时,您必须在连接期间提供 CA 文件。 CA 文件用于验证服务器提供的证书。受信任的第三方提供此 CA,并且(可能通过一系列受信任的方)向服务器提供证书,因此您可以通过使用 CA 验证其证书来验证服务器是否声称它是谁。
所有平台都带有一组初始根证书,可以验证众所周知的第三方生成的证书。您正在连接的 mongodb 服务器可能正在使用这样的证书,因此,您的 OS 证书可用于验证它。如果你有自己的 PKI 和你自己的 CA 未经第三方验证,那么你需要一个由你自己的 CA 签名的单独的 CA 文件。然后您需要传递该 CA 文件来验证服务器,因为您的根证书将不包含您的自定义 CA。
我正在用 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 上的托管集群?
CA 文件指定您信任哪些自签名根证书,并且还可以包括中间证书颁发机构。
当应用程序连接到服务器时,服务器会发送其证书作为握手的一部分。服务器的证书经过数字签名。
为了检查服务器证书是否未被篡改,将查询颁发者的证书,其中包含可用于验证数字签名的 public 密钥。
如果颁发者是中间 CA,则其证书也由另一个 CA 签名,因此将参考 CA 的证书来验证中间证书上的签名。
这一直持续到链到达一个由它自己签名的证书。这是根证书。由于它会自行签名,因此您必须明确表明您信任它才能信任整个链,包括所连接的服务器。
这里的底线是您需要在以下情况下提供 CA 文件:
- 您关心验证所连接服务器的身份(即防止中间人攻击),并且
- 根证书不会通过包含在本地信任库中而被隐式信任
在启动 TLS 连接时,您始终需要 CA 证书来验证服务器。有时这已经安装在您的平台上并自动使用。当此类根证书不可用时,您必须在连接期间提供 CA 文件。 CA 文件用于验证服务器提供的证书。受信任的第三方提供此 CA,并且(可能通过一系列受信任的方)向服务器提供证书,因此您可以通过使用 CA 验证其证书来验证服务器是否声称它是谁。
所有平台都带有一组初始根证书,可以验证众所周知的第三方生成的证书。您正在连接的 mongodb 服务器可能正在使用这样的证书,因此,您的 OS 证书可用于验证它。如果你有自己的 PKI 和你自己的 CA 未经第三方验证,那么你需要一个由你自己的 CA 签名的单独的 CA 文件。然后您需要传递该 CA 文件来验证服务器,因为您的根证书将不包含您的自定义 CA。