4

根据此处的 Java 12 安全规范,应支持 RSASSA-PSS 签名方案(实际上从 Java 11 开始)。但是,如果我尝试在我的 JWT 中使用带有 PS256 算法的签名,例如使用nimbus jose+jwt库,那么除非我使用 BouncyCastle,否则它不起作用。

        val signer = RSASSASigner(signKey)
        val jwsObject = JWSObject(
                JWSHeader.Builder(JWSAlgorithm.PS256)    // PS256 gives error;  RS256 will work
                        .keyID(signKeyId)
                        .build(),
                Payload(json)
        jwsObject.sign(signer)

这给出了一个错误:

java.security.NoSuchAlgorithmException: SHA256withRSAandMGF1 Signature not available

确实JCASupport.isSupported(JWSAlgorithm.PS256)是假的

如果我包括 BouncyCastle 那么它确实有效:

        Security.addProvider(BouncyCastleProviderSingleton.getInstance())
        JCASupport.isSupported(JWSAlgorithm.PS256) == true

我原以为在 Java 12 中不再需要 BouncyCastle(我实际上是在使用 Kotlin 1.3 和 Java 12 以及 Spring Boot 2.2 和 com.nimbusds 8.4 准确地说)。我想独立于 BouncyCastle。

我错过了什么?

4

0 回答 0