项目中使用不同版本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包进行了对比
0.1.54
com.jcraft.jsch.jce.SignatureECDSA
0.1.55
com.jcraft.jsch.jce.SignatureECDSAN
com.jcraft.jsch.jce.SignatureECDSA256
com.jcraft.jsch.jce.SignatureECDSA384
com.jcraft.jsch.jce.SignatureECDSA521
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对比长度
0.1.54
0.1.55
成功
问题原因结论
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三种长度
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服务器的问题
新问题
sshd默认长度来源追溯
反推的深度大概有几十层,参数传递过程中经过了包括各种抽象类、构造器、类方法转换等,不一一展开
当属性keySize为0,会选择ECCurves.SORTED_KEY_SIZE第三位
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能升级就升级,考虑稳定的话使用兼容方案
解决结论
原文地址:https://blog.csdn.net/weixin_43859729/article/details/125364037
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_36444.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!