根据此处的 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。
我错过了什么?