Java Keyfactory无法使用nimbus生成ECPublicKey

时间:2018-08-27 18:19:10

标签: java jwt openid elliptic-curve

我正在尝试使用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");

2 个答案:

答案 0 :(得分:0)

没有得到堆栈跟踪,这是我这边的猜测工作。但是,考虑到它可以在某些环境下工作,在我看来,某些环境(可以工作的环境)启用了“无限键强度”策略文件,而其他环境(不能工作的环境)则没有。

可能需要生成的公钥大于标准策略下可用的公钥。

答案 1 :(得分:0)

实际上,问题在于java.security file中的提供者列表。如果没有为算法指定特定的提供程序,它将使用java.security中提供的列表中的默认提供程序。在生产环境中,该文件丢失。很难弄清楚,因为没有抛出异常或错误。简而言之,java.security文件丢失,并且找不到算法提供者。