接手的一个项目当中用到3DES加密,项目突然爆出Unsupported secret key algorithm:DESede的错误:
java.security.NoSuchAlgorithmException:Unsupported secret key algorithm: DESede
at com.sun.crypto.provider.DHKeyAgreement.engineGenerateSecret(DHKeyAgreement.java:387)
at javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:648)
报错信息日志
调用该方法发生的异常
通过一层一层深入查找发现了%JAVA_HOME%/lib(%JAVA_HOME%是jre的路径)下的jce.jar中KeyAgreementSpi 抽象类中的engineGenerateSecret抽象方法 而%JAVA_HOME%/lib/ext/目录下的sunjce_provider.jar 中DHKeyAgreement.class继承了这个抽象类 如下:
项目当时是使用Docker搭建的集群系统,JAVA环境是使用的一个官方镜像:
命令:docker images
命令:docker search tomcat
一个官方tomcat镜像
根据镜像ID 找到镜像的所在位置
sudo docker inspect #镜像ID#
找到镜像所在位置
发现%JAVA_HOME%中的文件有过更新
将服务器中的当前jre下sunjce_provider.jar包中DHKeyAgreement 与 本地环境做比较发现:
该方法的使用做了一些调整
无奈项目要求紧还没有闲心去深看具体的细节,最终只能将JDK的版本做了一下还原,替换成了原JDK的环境(直接把原jre/lib/整个文件夹文件进行了覆盖)服务启动测试,通过!