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

项目中使用不同版本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的区别

前置知识:ssh握手过程,来自b站的技术蛋老师
在这里插入图片描述

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

失败
在这里插入图片描述

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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值