Как подписать нестандартного провайдера безопасности JCE - PullRequest
11 голосов
/ 18 ноября 2009

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

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

javax.crypto.JceSecurity.verifyProviderJar(...) бросков.
(звонит javax.crypto.JarVerifier.verify())

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

Ответы [ 4 ]

9 голосов
/ 18 ноября 2009

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

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

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

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

4 голосов
/ 31 марта 2011

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

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

1 голос
/ 04 декабря 2013

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

1 голос
/ 18 ноября 2009

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

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

...