在升级到openssh 8.5 版本后,由于其不再支持sha-1加密算法,导致一些老板本的GBase 8a集群在使用sftp加载时,报 ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on sftp://XXXX failed with error - Failed initialization,需要升级数据库到支持sha256的版本。
目录导航
参考
GBase 8a数据库支持sha256用户密码加密的功能gbase_caching_sha2_password
报错样例
升级openssh8.5p1后,采用sftp加载时报如下错误:
gbase> load data infile 'sftp://gbase:gbase@192.168.56.123/home/gbase/1.txt' into table aaadata_format 3 fields terminated by '|';
ERROR 1733 (HY000): (GBA-01EX-700) Gbase general error: I/O operation on sftp://gbase:*****@192.168.56.123/home/gbase/1.txt failed with error - Failed initialization, File name sftp://gbase:*****@192.168.56.123/home/gbase/1.txt
原因
OpenSSH组件自8.5版本后终止对SHA-1散列算法的支持,原因为:
SHA-1散列算法中存在的安全问题,被业内认为是不安全的。该算法在2017年2月被谷歌密码学专家破解,可利用SHAttered技术将两个不同文件拥有相同的SHA-1文件签名。
不过当时创建一个SHA-1碰撞被认为需要非常昂贵的计算成本,因此谷歌专家认为SHA-1在实际生活中至少还需要等待半年的时间,直到成本进一步下降。随后在在2019年5月和2020年1月发布的研究报告中,详细介绍了一种更新的方法,将SHA-1选择-前缀碰撞攻击的成本分别降低到11万美元和5万美元以下。
鉴于对该算法当前情况下破解的成本,OpenSSH自8.5版本后终止了对SHA-1散列算法的支持。具体详见OpenSSH官网发布的8.5版本release_note:https://www.openssh.com/txt/release-8.5
由于gbase8a早期版本中在代码中静态编译了较早版本的libcurl库和libssh2库,支持更高安全性加密算法SHA256的libcurl库和libssh2库需要较新版本,因此早期版本的gbase 8a在升级OpenSSH8.5p1后会出现sftp加载报错的问题,原因是引用库的加密算法和sshd-server支持的算法不匹配。
验证方法
指定认证方法为ssh-rsa,如果能正常连接,那就是对面还没有移除sha1。
ssh -oHostKeyAlgorithms=ssh-rsa user@host
解决办法
升级数据库版本
可以通过升级GBase 8a数据库版本解决sftp加载报错问题,在较新版本的GBase 8a版本中已经更新了引用的libcurl和libssh库,支持SHA256加密算法。
可升级解决该问题的版本包括如下:
大版本 | 具体版本 |
V8.6.2_build33 | 8.6.2_build33-R43.126996 版本及以上 |
V8.6.2_build43 | 8.6.2_build43-R30 版本及以上 |
V9.5.2 | 9.5.2.33 版本及以上 |
临时规避
暂时将sftp协议方式更改为ftp协议方式加载可暂时绕过该问题。
其它
由于升级OpenSSH8.5P1后升级了原有加密算法,因此采用SSL加密的协议均可能收到升级影响,如hadoop加载或者导出使用了kerberos认证,采用https(gbase_hdfs_protocol参数配置为https)协议则会受到升级后影响,也需要通过升级集群版本解决。