2009-11-18 8 views
8

Dostawca zabezpieczeń PKCS11 JCE firmy Sun nie ma niektórych funkcji, których potrzebujemy.
Więc napisałem jego ulepszoną wersję, używając oryginalnych źródeł.Jak podpisać niestandardowego dostawcę zabezpieczeń JCE

Niestety infrastruktura JCE odrzuca nowego dostawcy
„JCE nie może uwierzytelnić usługodawca”
ponieważ nie jest poprawnie podpisany.

javax.crypto.JceSecurity.verifyProviderJar(...) rzuty.
(wywołuje javax.crypto.JarVerifier.verify())

Wszelkie sugestie, jak podpisać nowy dostawca, aby to praca z JCE?

+3

FYI: poprosiliśmy o certyfikat firmy Sun i dostaliśmy go w ciągu 3 dni roboczych, bez kłopotów. Certyfikat może być użyty do podpisania tak wielu wersji, których potrzebujemy. Ponieważ ta procedura może zależeć od Twojej lokalizacji, warto wspomnieć, że działamy ze Szwajcarii, Europy. – 3dGrabber

Odpowiedz

7

Proces ten jest opisany w dokumencie, "How to Implement a Provider."

Polega ona wysyłając Sun Oracle niektóre informacje (w tym CSR wygenerowanym dla klucza podpisującego), a następnie faksem dokument potwierdzający. Odesłanie podpisanego certyfikatu może potrwać tydzień lub dłużej, więc planuj z wyprzedzeniem.

Musisz podpisać tylko swojego dostawcę, jeśli świadczy on usługi ograniczone przez niektóre (represyjne) rządy. Na przykład implementacja Cipher jest zastrzeżoną "usługą", a MessageDigest jest usługą nieograniczoną. Zakładam, że z wiadomością, którą otrzymujesz, próbujesz świadczyć ograniczone usługi.

W przypadku świadczenia którejkolwiek z tych usług nie ma możliwości obejścia tego: Potrzebujesz certyfikatu podpisującego kod wydanego przez firmę Sun. (Jeden z IBM też może działać, jeśli dobrze pamiętam, ich CA podpisujący kod jest obsługiwany, ale nie wiem nic o ich procesie wydawania.)

2

Musisz podpisać JAR za pomocą "JCE Code Signing CA ". We wszystkich obecnych dystrybucjach Java tylko 2 CA (Sun i IBM) są wbudowane (zakodowane na stałe) i nie ma sposobu na dodanie własnych. Próbowaliśmy współpracować z firmą Sun w celu podpisania umowy z usługodawcą i jest to prawie niemożliwe. Nie wystawią pośredniego certyfikatu CA, co oznacza, że ​​musisz przejść przez kłopoty za każdym razem, gdy wprowadzisz zmianę.

Dlaczego po prostu nie masz własnej biblioteki? Używasz standardowego API do współdziałania różnych JCE. Ale to nie jest realistyczne dla rzeczy CryptoKi/SmartCard już teraz, prawie zawsze musisz napisać niestandardowy kod, aby wejść w interakcję z API specyficznym dla dostawcy. Możesz nawet sprawić, by twój kod naśladował interfejs API JCE, aby zminimalizować zmiany kodu.

+0

Otrzymałem dwa certyfikaty od Sun, bez żadnych problemów. Byli bardzo pomocni i reagowali. – erickson

+1

Czy masz na myśli otrzymanie "Certyfikatu podpisywania kodu JCE" od firmy Sun? Używają specjalnego katalogu głównego CA dla JCE "JCE Code Signing CA". Tak więc normalny certyfikat podpisywania kodu nie działa. –

+0

Tak, mam na myśli certyfikat, że musisz podpisać dostawcę JCE. – erickson

3

Alternatywą jest zaprojektowanie własnego dostawcy przy użyciu OpenJDK. Jest to projekt open-source sponsorowany przez firmę Sun/Oracle i zapewnia podstawę kodu do ich oficjalnego wydania. OpenJDK nie wymaga podpisu dostawców. OpenJDK jest dostępny (domyślnie teraz) w kilku dystrybucjach systemu Linux. Niestety, nie wydaje się być łatwo dostępne na Windows lub Macintosh. Jeśli używasz systemu Windows lub Macintosh, zalecam zainstalowanie systemu Linux na maszynie wirtualnej.

Jeśli jednak musisz pracować w systemie Windows lub Mac, możesz skopiować plik jce.jar z instalacji OpenJDK przez jce.jar (w katalogu lib twojej biblioteki) oficjalnej instalacji. To skutecznie obejdzie proces uwierzytelniania Jar. Pamiętaj jednak, aby przywrócić oryginalny plik jce.jar, gdy skończysz programowanie.

0

Tylko dla dodatkowej informacji, mam ten sam wyjątek kiedy zbudować JAR (Eclipse Juno) z opcją „wyciąg wymagane biblioteki w wygenerowanym JAR” zamiast prawidłowego „opakowania wymagane biblioteki w wygenerowanym JAR”