Ambari-agent "CERTIFICATE_VERIFY_FAILED", 在 Python 中禁用证书验证是否安全?

Ambari-agent "CERTIFICATE_VERIFY_FAILED", Is it safe to disable the certificate verification in Python?

Ambari 版本:2.2.2.18 HDP 堆栈:2.4.3 OS: centos 7.3

问题描述:

Ambari 服务器无法与 Ambari 代理通信。我可以在 ambari-agent 日志中看到以下错误:

ERROR 2017-09-18 06:35:34,684 NetUtil.py:84 - [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)
ERROR 2017-09-18 06:35:34,684 NetUtil.py:85 - SSLError: Failed to connect. Please check openssl library versions.

我最近遇到了这个问题,看起来这个问题可以在实例重新启动后一致地复制。 (我正在使用 EC2 实例)。

我能够成功注册代理节点、安装 HDP 集群、运行 yarn 作业等。完全没问题。重新启动我的实例后,我发现了这个问题。

已经针对此问题发布了一些解决方案,例如:

我不想玩 Python 因为它会破坏很多东西,比如 Cassandra、yum 包管理器等...

第二种解决方法非常简单,而且效果很好!

现在我的问题来了:- 在 Python 中禁用证书验证是否安全?即通过设置 属性 verify = disable

一般来说,这是个坏主意。如果有人可以访问服务器上用于代理服务器通信的端口(如果我没记错的话是 8443),他可以注册为代理并获取所有集群配置和密码。或者经典的中间人攻击将允许通过读取未加密的流量来执行相同的操作。稍微困难一点的攻击将允许向代理发送命令(可能具有 root 权限)。

您的问题听起来像是您重新配置了 ambari-server 主机,并留下了旧的 ambari-agent 实例 运行,或者您的证书可能已过时?第一次连接到 ambari-server,代理生成证书并发送到服务器。服务器使用自己的密钥签署这些证书,因此现在服务器代理连接已加密。您是否尝试按照建议删除旧证书并重新启动服务器和代理 here

我们是如何调查这个问题的,我们采用了什么解决方案:

调查详情:

降级到 Python 2.6 是不可行的,因为存在 OS 依赖项,并且根据之前评论中 'Dmitriusan' 的建议,禁用证书验证不是一个好主意Python.

我们使用 AWS EC2

使用 Python 2.7、JDK 1.8 和 Cent OS 7.2 没有问题。一切顺利。

在 Python 2.7、JDK 1.8 和 Cent OS 7.3 和 Centos 7.4 中,我们遇到了这个问题。

我在这里报告的问题是关于 Centos 7.3 和 Centos 7.4 的问题略有不同。将节点添加到群集本身时证书验证失败。

从 centos 7.3 降级到 7.2 并不简单。 AWS EC2 市场提供 Centos 7.0 镜像,当我们从该镜像创建实例时,它会应用安全和补丁更新,从而生成 Centos 7.3。

我们可以从现有服务器创建我们自己的 Centos 7.2 映像,但是,出于安全原因,使用 OS 的最新更新总是好的。

简而言之,我们有变通办法但没有解决方案。

我们采用的解决方案:

经过一系列测试,我们决定升级到Centos 7.4、HDP-2.6.3.0、Ambari 2.6.0.0

使用 Centos 7.4 和 Ambari 版本 2.6.0.0,即使我安装了 'Python 2.7.5',我们也没有看到这个问题。

所以这看起来是 Ambari 的问题

旧版本的 Ambari (2.4.2) 无法识别强制 TLS 配置。我们将 Ambari 升级到 2.6.2,心跳开始工作。