跳至内容

当我尝试连接到我的 Amazon DocumentDB 集群时,为什么我会收到 "SSLHandshakeFailed" 错误?

1 分钟阅读
0

当我尝试连接到我的 Amazon DocumentDB 集群时,我收到 "SSLHandshakeFailed" 错误。

简短描述

默认情况下,Amazon DocumentDB 会启用安全套接字层 (SSL) 或传输层安全性协议 (TLS) 配置,且仅允许加密连接。如果您的应用程序不使用 SSL/TLS 连接,请使用自定义 Amazon DocumentDB 集群参数组来关闭此选项。有关详细信息,请参阅管理 Amazon DocumentDB 集群 TLS 设置。

**注意:**TLS 是一个静态参数。您必须重启集群才能应用所有集群参数组更改。有关详细信息,请参阅修改 Amazon DocumentDB 集群参数。

您可能会由于以下原因之一收到 "SSLHandshakeFailed" 错误:

  • 您重命名了 Amazon DocumentDB 集群或实例,这会导致 SSL 证书不一致。
  • 您通过 SSH 隧道从虚拟私有云 (VPC) 外部连接到集群。
  • 您创建了 Amazon DocumentDB 端点的 Amazon Route 53 CNAME 记录。

解决方法

解决 SSL 证书不一致问题

当您创建 Amazon DocumentDB 实例时,Amazon DocumentDB 会自动为该数据库实例创建并分配 SSL 证书。此 SSL 证书包含有关数据库集群、实例及其端点的信息。如果您修改了集群名称或实例名称,则会在证书级别出现不一致。

要更新证书,请重启 Amazon DocumentDB 集群。使用 sslAllowInvalidHostnames 或 tlsAllowInvalidHostnames 连接字符串选项作为临时解决方法。

解决通过 SSH 隧道从 VPC 外部连接的问题

当您从 VPC 外部连接到 Amazon DocumentDB 集群时,SSH 隧道会使用中间 Amazon Elastic Compute Cloud (Amazon EC2) 实例的主机名。如果您建立 SSL/TLS 连接,客户端会期望主机名与证书中提及的 Amazon DocumentDB 端点相匹配。

要关闭主机名验证,请在连接字符串中使用 sslAllowInvalidHostnames 或 tlsAllowInvalidHostnames 选项。

**注意:**使用 SSH 隧道时,请勿在连接字符串中指定 replicaSet=rs0 以副本集模式进行连接。隧道设置无法验证是否将 rs0 识别为副本集配置,当您尝试以副本集模式进行连接时会收到错误。

解决使用客户管理型 Route 53 CNAME 的 SSL 连接问题

如果您使用 SSL/TLS 连接到客户管理型 Route 53 CNAME 记录,则 Route 53 记录的名称必须与数据库集群名称相匹配。您会收到错误,因为主机名与 Amazon DocumentDB 资源的 SSL 证书中提及的主机名不同。

Amazon DocumentDB 不允许您上传包含通过 CNAME 记录建立 SSL 连接所需信息的自定义证书。对于通过 CNAME 记录进行的最终用户连接,请改用等效的主机名检查忽略标志,例如 sslAllowInvalidHostnames 或 tlsAllowInvalidHostnames。

**注意:**在生产环境中,最佳安全做法是不使用 sslAllowInvalidHostnames 或 tlsAllowInvalidHostnames。

相关信息

从 Amazon VPC 外部连接到 Amazon DocumentDB 集群

作为副本集连接到 Amazon DocumentDB

对连接问题进行故障排除

对传输中数据加密

AWS 官方已更新 1 年前