sftp连接工具jsch:0.1.54与0.1.55版本的区别,连接到Apache SSHD

导读:本篇文章讲解 sftp连接工具jsch:0.1.54与0.1.55版本的区别,连接到Apache SSHD,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

项目中使用不同版本jsch包连接sftp,出现低版本连不上的问题,影响一些老项目,就看了一下原因

给出双方版本对比如下
在这里插入图片描述

问题

Q:使用jsch 0.1.54连接apache-mina-sshd 2.8.0时报错验证失败 verify false

深层思考

Q:jsch 0.1.54 与0.1.55搭配apache-mina-sshd 2.8.0的区别

JSCH

使用Beyond Compare工具对0.1.54和0.1.55的jsch包进行了对比

com.jcraft.jsch.JSch
在这里插入图片描述
发现如下结果

0.1.54

com.jcraft.jsch.jce.SignatureECDSA

默认只有256一种长度

0.1.55

有256、384、521三种长度

com.jcraft.jsch.jce.SignatureECDSAN

com.jcraft.jsch.jce.SignatureECDSA256

com.jcraft.jsch.jce.SignatureECDSA384

com.jcraft.jsch.jce.SignatureECDSA521

在这里插入图片描述

0.1.55支持更多ECDSA椭圆曲线数字签名算法密钥长度

在这里插入图片描述

jsch连接到sshd

客户端jsch连接到sftp服务器,对关键部位打断点,追溯到一处源码,看到默认长度为521

org.apache.sshd.server.kex.DHGServer
在这里插入图片描述
在这里插入图片描述
sshd中包含算法256、384、521三种长度,并且选中的长度为521,是jsch0.1.54没有521
在这里插入图片描述

org.apache.sshd.common.signature.SignatureECDSA

jsch对比长度

com.jcraft.jsch.KeyExchange
在这里插入图片描述

0.1.54

获取ecdsa
sftp连接工具jsch:0.1.54与0.1.55版本的区别,连接到Apache SSHD

失败
在这里插入图片描述

0.1.55

获取ecdsa521
在这里插入图片描述

成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IH6PguwQ-1655651739558)(C:\Users\81507\AppData\Roaming\Typora\typora-user-images\image-20220617221934198.png)]

问题原因结论

Q:使用jsch 0.1.54连接apache-mina-sshd 2.8.0时报错验证失败 verify false

A:jsch 0.1.54中ecdsa算法只有256长度,0.1.55中支持256、384、521三种长度

sshd 2.8.0中默认使用521长度

在jsch比较时,0.1.54比较不相等

深层思考

Q:jsch 0.1.54 与0.1.55搭配apache-mina-sshd 2.8.0的区别

A:jsch 0.1.55和sshd 2.8.0 都使用更长的521长度,应该是出于安全性考虑

当然,也可以进一步降低加密算法等级,比如变成rsa,下一篇会说
sftp连接工具ganymed-ssh2,连接不到Apache MINA SSHD sftp服务器的问题

新问题

Q:新老版本可以兼容吗

sshd默认长度来源追溯

根据shhd中得到521长度算法的地方反推

反推的深度大概有几十层,参数传递过程中经过了包括各种抽象类、构造器、类方法转换等,不一一展开

走到下面方法,可以看到

​ 当属性keySize为0,会选择ECCurves.SORTED_KEY_SIZE第三位

​ 当属性keySize不为0,使用keySize

org.apache.sshd.server.keyprovider.AbstractGeneratorHostKeyProvider
在这里插入图片描述

而ECCurves则是包含了256、384、521三种长度,按大小排列

org.apache.sshd.common.cipher.ECCurves
在这里插入图片描述

自定义算法长度

能不能自定义长度呢,根据keySize反推

AbstractGeneratorHostKeyProvider 有 setKeySize

org.apache.sshd.server.keyprovider.AbstractGeneratorHostKeyProvider
在这里插入图片描述

ok,我们在sftp server配置类中指定
在这里插入图片描述
并不优雅,其他人看到会不懂,既然我们追过源码,就可以这样明示此值含义

在这里插入图片描述

经过验证,兼容jsch0.1.54

更老的版本我没看,jsch能升级就升级,考虑稳定的话使用兼容方案

解决结论

Q:新老版本可以兼容吗

A:可以通过设置key的长度,适配长度较短的低版本jsch

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93681.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!