Поддержка алгоритма 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.

Что мне не хватает?

0 ответов

Другие вопросы по тегам