当我尝试连接到我的 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
对连接问题进行故障排除
对传输中数据加密