本文介绍: 项目使用不同版本jsch连接sftp出现低版本连不上问题影响一些老项目,就看了一下原因Q:使用jsch 0.1.54连接apacheminasshd 2.8.0时报错验证失败 verify false深层思考Q:jsch 0.1.54 与0.1.55搭配apacheminasshd 2.8.0的区别使用Beyond Compare工具对0.1.54和0.1.55的jsch包进行了对比com.jcraft.jsch.JSch发现如下结果com.jcraft.jsch.jce.Signat

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

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

问题

Q:使用jsch 0.1.54连接apacheminasshd 2.8.0时报错验证失败 verify false

深层思考

Q:jsch 0.1.54 与0.1.55搭配apacheminasshd 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:Users81507AppDataRoamingTyporatypora-user-imagesimage-20220617221934198.png)]

问题原因结论

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

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

sshd 2.8.0中默认使用521长度

jsch比较时,0.1.54比较不相等

深层思考

Qjsch 0.1.54 与0.1.55搭配apachemina-sshd 2.8.0的区别

Ajsch 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://blog.csdn.net/weixin_43859729/article/details/125364037

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_36444.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注