Hue连接启用SSL的Oozie服务器时出现Bad handshake错误求助
我之前也碰到过一模一样的情况——curl能正常获取Oozie状态,但Hue提交Pig工作流就报bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')])错误。大概率是Hue的SSL配置没完全对齐,或者它依赖的Python环境没信任你的CA证书,给你几个针对性的排查步骤:
1. 核对Hue配置文件中的Oozie SSL参数
首先打开Hue的核心配置文件hue.ini,找到[oozie]配置段,确保这几个关键参数设置正确:
[oozie] # 必须开启SSL连接开关 security_enabled=true # 填写你在Oozie机器生成的CA证书的**完整绝对路径** ssl_ca_cert=/opt/certs/your-ca-cert.pem # 如果你的Oozie用的是自签名CA证书,确保这个参数设为true(有些版本默认是false) verify_certs=true
另外要注意:Hue的运行用户(通常是hue用户)必须有读取这个证书文件的权限,执行以下命令调整权限:
chown hue:hue /opt/certs/your-ca-cert.pem chmod 644 /opt/certs/your-ca-cert.pem
2. 同步CA证书到Hue依赖的信任存储
curl能成功是因为它默认使用系统的CA信任库,但Hue基于Python运行,可能用的是Python自身的certifi证书 bundle,或者虚拟环境的独立信任库,导致没识别到你的自定义CA证书。
方法一:更新系统级CA信任库
适用于大多数集群环境:
- RHEL/CentOS系列:
cp /opt/certs/your-ca-cert.pem /etc/pki/ca-trust/source/anchors/ update-ca-trust extract - Debian/Ubuntu系列:
cp /opt/certs/your-ca-cert.pem /usr/local/share/ca-certificates/ update-ca-certificates
方法二:直接更新Python的certifi证书库
如果Hue用的是独立虚拟环境的Python,直接把CA证书追加到certifi的bundle里:
- 先找到certifi证书文件的位置:
python -c "import certifi; print(certifi.where())" - 将你的CA证书追加到该文件末尾:
cat /opt/certs/your-ca-cert.pem >> /path/to/certifi/cacert.pem
3. 重启Hue服务让配置生效
不管修改了配置还是证书,一定要重启Hue服务才能生效:
service hue restart # 如果是用Ambari或Cloudera Manager管理集群,直接从管理界面重启Hue服务即可
4. 开启调试日志排查细节
如果还是不行,开启Hue的调试日志找更具体的错误:
在hue.ini的[desktop]段添加:
[desktop] log_level=debug
重启Hue后,查看日志文件(通常路径是/var/log/hue/hue.log),里面会有更详细的SSL握手失败细节,比如是不是证书路径写错了,或者证书格式不是PEM格式(要确保你的CA证书是纯文本的PEM格式,没有加密或二进制内容)
内容的提问来源于stack exchange,提问作者Karthik Sridhar

