我正在尝试使用nimbusds库验证从PingAccess接收到的EC类型算法的JWT令牌。并非在所有环境中都有效。但是它们都具有相同版本的Java。某些环境无法生成具有密钥规格的ECPublickey对象,因此无法从远程密钥集中找到匹配的密钥。有人对EC算法使用JWT令牌有类似的经验吗?我怎么知道环境中是否存在EC算法?根据此处的文档https://docs.oracle.com/javase/8/docs/api/index.html?java/security/KeyFactory.html
Java平台的每个实现都需要支持 以下是标准的KeyFactory算法:
DiffieHellman DSA RSA
它没有提及EC算法,但在此处列出了:https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyFactory
在nimbusds ECKey类中,跟踪在此行停止:
ECPublicKey ecPublicKey = (ECPublicKey)keyFactory.generatePublic(publicKeySpec);
关键工厂是:
keyFactory = KeyFactory.getInstance("EC");
答案 0 :(得分:0)
没有得到堆栈跟踪,这是我这边的猜测工作。但是,考虑到它可以在某些环境下工作,在我看来,某些环境(可以工作的环境)启用了“无限键强度”策略文件,而其他环境(不能工作的环境)则没有。
可能需要生成的公钥大于标准策略下可用的公钥。
答案 1 :(得分:0)
实际上,问题在于java.security file
中的提供者列表。如果没有为算法指定特定的提供程序,它将使用java.security中提供的列表中的默认提供程序。在生产环境中,该文件丢失。很难弄清楚,因为没有抛出异常或错误。简而言之,java.security
文件丢失,并且找不到算法提供者。