Поддержка алгоритма PS256 для подписей в Java
Согласно спецификациям безопасности Java 12 здесь должна поддерживаться схема подписи RSASSA-PSS (фактически, начиная с Java 11). Однако, если я попытаюсь использовать подпись с алгоритмом PS256 в моем JWT, используя, например, библиотеку 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
Я бы подумал, что BouncyCastle больше не нужен в Java 12 (на самом деле я использую Kotlin 1.3 с Java 12 и Spring Boot 2.2 и com.nimbusds 8.4, если быть точным). Я хотел бы быть независимым от BouncyCastle.
Что мне не хватает?