Как подписать поставщика услуг безопасности JCE

Поставщик безопасности Sun PKCS11 JCE не обладает необходимой функциональностью.
Поэтому я написал расширенную версию, используя исходные источники.

К сожалению, инфраструктура JCE отвергает нового провайдера
" JCE не может аутентифицировать поставщика "
потому что он неправильно подписан.

javax.crypto.JceSecurity.verifyProviderJar(...) бросает.
(он вызывает javax.crypto.JarVerifier.verify())

Любые предложения о том, как подписать нового поставщика, чтобы сделать это работать с JCE?

Ответ 1

Процесс описан в документе "Как реализовать поставщика" .

Он включает в себя отправку по электронной почте Sun Oracle некоторую информацию (включая CSR, которую вы создали для вашего ключа подписи), а затем отправку факсов подтверждающему документу. Получение вашего подписанного сертификата может занять неделю или больше, поэтому планируйте заранее.

Вам нужно только подписать своего провайдера, если он предоставляет услуги, которые ограничены некоторыми (репрессивными) правительствами. Например, реализация Cipher является ограниченной "службой", а MessageDigest - неограниченной службой. Я предполагаю, что с сообщением, которое вы получаете, вы пытаетесь предоставить ограниченные услуги.

Если вы предоставляете какие-либо из этих услуг, нет никакого способа обойти это: вам нужен сертификат подписи кода, выпущенный Sun. (Один из разработчиков IBM тоже может работать, если я правильно помню, их ЦС подписи кода поддерживается, но я ничего не знаю об их процессе выдачи.)

Ответ 2

Альтернативой является создание вашего пользовательского поставщика с помощью OpenJDK. Это проект с открытым исходным кодом, спонсируемый Sun/Oracle, и предоставляет базу кода для их официального выпуска. OpenJDK не требует подписания подписчиков. OpenJDK доступен (по умолчанию, сейчас) в нескольких дистрибутивах Linux. К сожалению, он, похоже, не доступен для Windows или Macintosh. Если вы используете Windows или Macintosh, я рекомендую установить Linux в виртуальную машину.

Если вам необходимо разработать на Windows или Mac, вы можете скопировать файл jce.jar из установки OpenJDK поверх jce.jar(в вашем каталоге Java lib) официальной установки. Это будет эффективно обходить процесс аутентификации Jar. Обязательно верните исходный файл jce.jar, когда вы закончите разработку.

Ответ 3

Вы должны подписать JAR с помощью CA JCE Code Signing CA. Во всех текущих дистрибутивах Java только 2 ЦС (Sun и IBM) встроены (жестко закодированы), и нет возможности добавить свои собственные. Мы пытались работать с Sun, чтобы подписать нашего провайдера, и это почти невозможно. Они не выдавали промежуточный сертификат CA, а это означает, что вам приходится сталкиваться с трудностями каждый раз, когда вы делаете изменения.

Почему бы вам просто не использовать свою собственную библиотеку? Вы используете стандартный API для взаимодействия между различными JCE. Но это не реально для CryptoKi/SmartCard прямо сейчас, вы почти всегда должны писать какой-то пользовательский код для взаимодействия с конкретным API-интерфейсом поставщика. Вы даже можете сделать код похожим на JCE API, чтобы свести к минимуму изменения кода.

Ответ 4

Только для дополнительной информации, я получил то же самое исключение, когда я создаю JAR (Eclipse Juno) с опцией "Извлечение необходимых библиотек в сгенерированный JAR" вместо правильных "Пакет необходимых библиотек в сгенерированный JAR"