Справочная информация: что работает
Время от времени нам приходится использовать часть программного обеспечения Java, которое читает хранилища ключей PKCS # 12.Для этого конкретного проекта нам необходимо создавать открытые / закрытые пары по мере необходимости, и мы храним ключи в файлах PKCS12, потому что он стабилен, и почти все могут читать этот формат.
Поскольку мы делаемУ нас много Java, keytool
сидят без дела, и мы решили, что просто используйте keytool для создания закрытого ключа и сертификата.Типичный пример выглядит следующим образом:
keytool -keystore MyLuggage.p12 -storepass 123456 -storetype pkcs12
-alias "......"
-genkeypair -keyalg RSA -keysize typically_2048_or_3072 -sigalg SHA256withRSA
-ext "KeyUsage=dataEncipherment,digitalSignature,keyEncipherment"
-startdate ....
-dname "......."
Фактический -keysize
на практике варьируется между 2048 и 8192;для целей этого вопроса, похоже, не имеет значения, что используется, но, очевидно, мы используем длины ключей, соответствующие задаче, если мы вообще их выбираем (обычно это диктуется ограничениями другого программного обеспечения или диктуетсянекоторые правила, которые нам передали).
Это всегда работало, в том, что другое программное обеспечение - включая программное обеспечение Java, упомянутое в начале - может читать хранилище ключей и использовать закрытые ключи внутри.(И открытый ключ можно экспортировать и использовать, и т. Д.)
Вот что ломается
Программное обеспечение недавно было обновлено до версии, использующей сертифицированную FIPS 140 Javaбиблиотеки от RSA.(«BSAFE» или «JSAFE» в зависимости от того, кого вы спрашиваете.) И теперь, попытка открыть ранее созданные файлы PKCS # 12 завершается неудачно с
java.lang.SecurityException: Algorithm not allowable in FIPS140 mode: PBE/PKCS12/SHA1/RC2/CBC/40
at ......
at java.security.KeyStore.load(Unknown Source)
.источник RSA, которого у нас нет, и он ищет имена функций, которые в любом случае были запутаны.Так что, глядя на их источник, чтобы попытаться выяснить, что именно он тестирует, чтобы вызвать это, не вариант.
Итак, что является причиной ?Единственные алгоритмы, которые мы выбрали, - это генерация ключа «RSA» и подпись «SHA256withRSA», оба из которых разрешены FIPS 140-2.Я снова просматривал вывод keytool -genkeypair -help
и, похоже, не было никаких других алгоритмов или параметров безопасности.(Мы избегали использования -keypass
, потому что инструменты PKCS # 12 действительно ненавидят его, когда пароль хранилища ключей и пароль ключа различаются, и keytool -genkeypair
по умолчанию вводит пароль ключа в пароль хранилища ключей.) Остальная часть сообщения об ошибке сбивает с толку, поскольку мы нигде не указываем использование SHA-1 или RC2 (!).
Поиск в Google указывает на людей, имеющих проблемы с созданием SSL-сертификатов, которые мы здесь не делаем, и на решения, предоставленныеКажется, что это специфично для Tomcat.
Это проблема с тем, как мы создаем хранилище ключей, как мы создаем пару ключей в хранилище ключей, или какую-то "особенность"FIPS 140, с которым мы раньше не сталкивались?