Примечание. Поддержка режима FIPS, по-видимому, уже реализована. начал исчезать в
Java 1.9, было подтверждено, что с Java
11 это пустая операция. Для Java 11 или более поздней версии мы рекомендуем использовать поставщика BCJSSE, если вам нужна поддержка FIPS.
(сноска на странице 11). И я делаю это в «смешанном» контексте, поэтому большинство потоков выполняются в режиме по умолчанию, а некоторые — в режиме, одобренном только FIPS.
Однако, похоже, это не так. Работа: кажется, что «одобренный» поток пытается повторно использовать и экземпляр создается «неутвержденным» потоком.
В частности, при программном включении bc-fips-1.0.2.jar BCFIPS и BCJSSE bctls-fips-1.0.10.jar на стандартном неизмененном OpenJDK 8 (в моем случае Corretto 8u232) и программном удалении встроенного поставщика SunJSSE, а затем выполнении HTTPS-соединения в новом потоке в несанкционированном режиме, затем в другом новом потоке в одобренном режиме возникает исключение:
Код: Выделить всё
Caused by: org.bouncycastle.crypto.fips.FipsUnapprovedOperationError: Attempt to use unapproved implementation in approved thread: SHA-512
at org.bouncycastle.crypto.internal.io.Utils.approvedModeCheck(Unknown Source)
at org.bouncycastle.crypto.internal.io.DigestOutputStream.write(Unknown Source)
at org.bouncycastle.crypto.UpdateOutputStream.update(Unknown Source)
at org.bouncycastle.jcajce.provider.BaseMessageDigest.engineUpdate(Unknown Source)
at java.security.MessageDigest.update(MessageDigest.java:335)
at org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCryptoProvider$NonceEntropySource$NonceEntropySourceSpi.runDigest(Unknown Source)
at org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCryptoProvider$NonceEntropySource$NonceEntropySourceSpi.engineNextBytes(Unknown Source)
at java.security.SecureRandom.nextBytes(SecureRandom.java:468)
at org.bouncycastle.tls.crypto.impl.jcajce.JcaNonceGenerator.(Unknown Source)
at org.bouncycastle.tls.crypto.impl.jcajce.JcaTlsCrypto.createNonceGenerator(Unknown Source)
at org.bouncycastle.tls.AbstractTlsContext.createNonceGenerator(Unknown Source)
at org.bouncycastle.tls.AbstractTlsContext.(Unknown Source)
at org.bouncycastle.tls.TlsClientContextImpl.(Unknown Source)
[etc]
Итак, мой вопрос: как мне заставить HTTPS-соединения работать, когда некоторые из них находятся в режиме по умолчанию, а другие - в режиме FIPS? только утвержденный режим с использованием BCJSSE вместо SunJSSE?
Или это не будет работать на Java 8, и мне придется ждать Java 9+, чтобы это начало работать? (Почему?)
(Моя конечная цель — не HTTPS-соединения, а другие вещи, где большинство из них будет работать в режиме по умолчанию, а некоторые потоки будут работать в режиме только для утвержденных.)
Подробнее здесь: https://stackoverflow.com/questions/633 ... vider-fips