【问题标题】:Java Keyfactory can't generate ECPublicKey using nimbusJava Keyfactory 无法使用 nimbus 生成 ECPublicKey
【发布时间】:2019-02-02 07:45:05
【问题描述】:

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

【问题讨论】:

    标签: java jwt openid elliptic-curve


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      没有得到堆栈跟踪,这对我来说有点猜测。但是,鉴于它适用于某些环境,在我看来,某些环境(可以工作的环境)启用了无限密钥强度策略文件,而其他环境(不工作的环境)则没有。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-27
        • 1970-01-01
        • 1970-01-01
        • 2016-02-21
        • 2013-03-07
        • 1970-01-01
        • 2015-07-18
        相关资源
        最近更新 更多