【已经解决】java.security.InvalidAlgorithmParameterException: Prime size must be multi

场景:

实现一个通过SFTP传递获取相关的文件,并将读取到的文件,以二进制的流的方式返回。


问题描述

遇到的问题:

上生产环境的时候,发现并不能成功运行。会报错,我的电脑本地可以运行。

java 复制代码
Caused by: com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 2048 (inclusive)
        at com.jcraft.jsch.Session.connect(Session.java:548)
        at com.gccloud.thinkops_monitor.controller.postInspection.utils.FtpUtil.previewFile(FtpUtil.java:308)
        ... 107 common frames omitted
Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 2048 (inclusive)
        at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DHKeyPairGenerator.java:120)
        at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:674)
        at java.security.KeyPairGenerator.initialize(KeyPairGenerator.java:411)
        at com.jcraft.jsch.jce.DH.getE(DH.java:58)
        at com.jcraft.jsch.DHGEX.next(DHGEX.java:137)
        at com.jcraft.jsch.Session.connect(Session.java:326)

原因分析:

问题的分析:

同事的电脑也不能运行,服务器也不可以运行,我的电脑可以运行。要么就是环境不一样,要么就是我电脑有缓存,还是之前的缓存的代码可以运行,我上传的部分代码不可以运行。于是我清理的相关的缓存,重新运行也可以。大致锁定是环境的问题。

确定是环境的问题,我开始思索是哪一个方面的具体问题,网络可能受限制,有的环境网络有出入的限制,我问了gpt,获取相关网络命令,发现可以通。排除网络问题

上网继续搜索,网络上大部分说是 jdk 安全认证 CE 模块,还有的要我修改代码,让其更改相关的加密认证部分。

java 复制代码
      // 修改加密算法配置部分
            Properties config = new Properties();
    // 只使用服务器明确支持的算法
            config.put("kex", "curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256");
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            log.debug("尝试连接SFTP服务器,超时设置为30秒");
            session.connect(30_000);
            log.info("SFTP会话连接成功");

然而修改并没有什么用 还是没有办法定位问题,现在要么就是jdk有问题,要么是加密有问题。

后来我又用另一台服务器试了下,发现程序可以正常运行。于是锁定是jdk问题

解决方案:

jdk的版本比较旧,更换为jdk-8u202-linux-x64.tar.gz

网上大部分是让其更换jre的安全模块,这里我就投机取巧了,直接更换jdk了。如果生产环境的不能动,建议更换jre安全认证,说实话这个工作量还不如替换jdk来的快。都是jdk8会兼容的。网上还建议更改ssh的相关的配置文件,增加相关的加密算法部分,但是我是并不是推荐这样,大多数服务器都是通过ssh连接,如果ssh相关的配置错误,重启失败,自己又连接不上服务器那就完蛋。如果真的要动这块,需要商量,并且在重启之前做好,检查配置文件的命令,通过命令的方式进行检查。不要上来就重启,防止自己被踢出去,到时候都连接不上服务器。

总结

建议要学会定位问题,我一开始就直接搜为什么sftp报错,这样效率极其低下。搜报错也比这个直接搜结果好。再者我应该学会去定位问题,要不然只能一个个的尝试,除非一点思路都没有,只能一个个的尝试。

相关推荐
vx-Biye_Design1 小时前
SSM伴侣动物伴护星小程序06330-计算机课程设计、毕业设计
spring boot·后端·elasticsearch·小程序·架构·课程设计·idea
2分钟速写快排3 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
面向Google编程3 小时前
Apache Iceberg Variant 类型:v3 半结构化数据不再「二选一」
大数据·后端
jason成都3 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
北岛贰5 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
IT_陈寒8 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端
小兵金林8 小时前
AI 生成代码的思考与实践
后端·ai编程
码事漫谈8 小时前
DeepSeek 明天又降价(涵历史价格对比)
后端
前端精髓8 小时前
NestJS 是什么(对着 Spring Boot 一起学习)
spring boot·后端·学习
国奉8 小时前
从零设计一个 iOS 文件浏览器:Sandbox、FileManager、Document Picker 与文件架构
后端