2009-11-18 2 views
8

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

К сожалению, инфраструктура ОКА отвергает новый поставщик
«ОКО не может проверить подлинность поставщика»
, потому что это не правильно подписан.

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

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

+3

FYI: мы запросили сертификат от Sun и получили его в течение 3 рабочих дней, без хлопот. Сертификат может использоваться для подписи как можно большего количества версий. Поскольку эта процедура может зависеть от вашего местоположения, стоит упомянуть, что мы работаем из Швейцарии, Европы. – 3dGrabber

ответ

7

Процесс описан в документе, "How to Implement a Provider."

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

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

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

2

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

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

+0

У меня есть два сертификата от Sun, без каких-либо проблем. Они были очень полезны и отзывчивы. – erickson

+1

Вы имеете в виду, что вы получаете «Сертификат подписи кода JCE» от Sun? Они используют специальный корень CA для JCE «JCE Code Signing CA». Поэтому регулярный сертификат подписи кода не работает. –

+0

Да, я имею в виду сертификат, который нужно подписать поставщику JCE. – erickson

3

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

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

0

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

Смежные вопросы