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

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

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

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

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

4 ответов


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

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

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

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


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

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


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

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


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