Kłopoty z kartą Certum
Jeden z czytelników serwisu zajmujący się pisaniem oprogramowania wykorzystującego bezpieczny podpis elektroniczny postanowił podzielić się swoimi doświadczeniami z kartami kryptograficznymi i sterownikami do nich, które otrzymał od Certum. Cały poniższy tekst pochodzi od oryginalnego autora, który woli pozostać anonimowy.
Korzystanie w dzisiejszych czasach z podpisu elektronicznego wymaga nie lada cierpliwości, programowanie również, szczególnie gdy różni dostawcy mają dowolność w konfigurowaniu parametrów chociażby kart kryptograficznych. Brak standardów to standard? Czyżby?
Dla przykładu chcę wprowadzić do swojej aplikacji w formie appletu Javy możliwość podpisywania dokumentów przy wykorzystaniu podpisów kwalifikowanych. Wybór ubogi jeżeli chodzi o rynek dostawców tego typu rozwiązań - aż trzech, mój wybór nie wiem, czy trafny, firma Unizeto.
Otrzymałem biblioteki, otrzymałem kartę, otrzymałem czytnik, usiadłem ze współpracownikami.
Próba odwołania się z appletu i odczytanie listy certyfikatów, dla których dostępne są klucze prywatne. Pierwszy raz, działa, Drugi raz... działa.. Trzeci raz... Wyjątek (czyli użytkownikowi musimy zgłosić, błąd, tylko jaki?)
Dla lubiących programować i czytać dokumentacje techniczne
godne polecenia logi:
java.security.ProviderException: Initialization failed
(...)
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_SESSION_COUNT
at sun.security.pkcs11.wrapper.PKCS11.C_OpenSession(Native Method)
`
I kilka uwag technicznych dla programujących z tzw dostawców (providerów) PKCS#11, a konkretnie z sun.security.pkcs11.SunPKCS11
- Utworzenie dynamicznie dostawcy poprzez wskazanie ścieżki do sterownika - C:\WINDOWS\system32\cryptoCertumPKCS11.dll (Profil bezpieczny) oraz jego nazwy (np. : Dostawca PKCS11)
- Zalogowanie się do magazynu certyfikatów podając kod PIN
- Pobranie magazynu certyfikatów - KeyStore
- Wypisanie identyfikatorów certyfikatów
- Wypisanie dostępnych kluczy publicznych oraz informacji czy istnieje klucz prywatny
- Zamknięcie dostępu do magazynu certyfikatów (metoda logout Providera)
- Usunięcie providera
Szczególnie na uwagę zwraca CKR_SESSION_COUNT (No sessions are available - brak dostępnych sesji), co to jest za stała?
Standardowe biblioteki Javy nie udostępniają informacji o dostępnych parametrach karty, więc trzeba było skorzystać z komponentów firmy trzeciej - IAIK, a konkretnie z bibliotek PKCS#11 Wrapper. Na szczęście dostarczane są za darmo wraz z dokumentacją.
Chwila prawdy: uruchamiam program wypisujący parametry dotyczące karty, na uwagę zasługuje parametr oraz jego wartość "ulMaxSessionCount: 4"
Wgląd w dokumentację techniczną PKCS#11 opublikowaną przez RSA (http://www.rsa.com/rsalabs/node.asp?id=2133). Mówiąc krótko - na karcie kryptograficznej można ustawić, ile razy jedna aplikacji może poprosić o dostęp do kluczy zawartych na karcie.
Czyli jak użytkownik uruchomi applet, cztery razy wskaże - "Proszę pokazać mi zawartość karty" to później nic innego nie pozostaje, jak zamknąć przeglądarkę, i na wejść na stronę, poczekać aż załaduje się applet, i a piać od nowa...
W przypadku Javy wygląda to jeszcze gorzej, mamy tak naprawdę możliwość otwarcia dwóch sesji, po czym występuje wskazany wyżej błąd.
Ciekawe jak to firma Unizeto chce rozwiązać w swoich programach, jeżeli będzie musiała skorzystać z Javy, np w obsłudze skrzynki podawczej?
Ciekawe też, czy inne Centra Certyfikacji stosują podobne mechanizmy "zabezpieczeń"?
Ciekawe co na to twórcy rozwiązań, jak podpiselektroniczny.pl, czy ePuap?
- Zaloguj się lub zarejestruj by odpowiadać
- Generate PDF file
- Wersja do wydruku










Odpowiedzi
Witam
Napisałem applet który używa API z java.security. Pobiera on certyfikat z certyfikatów osobistych Windows i podpisuje wiadomość pobraną z pola . Dla niektórych kart/certyfikatów otrzymuję SignatureException i komunikat "Zły UID". Czy ktoś może mi wytłumaczyć, co oznacza ten błąd?
Pozdrawiam
Witam,
ostatnio napotkałem na inny problem z kartami Certum. Sprawa dotyczy kart w wersji >= 3.0.
Problem stanowi wspomniana już biblioteka cryptoCertumPKCS11.dll. Nie za bardzo potrafi ona współpracować z nowymi kartami Certum. Na szczęście problem jest tylko i aż informacyjny bo okazuje się że do nowych kat należy korzystać z nowej biblioteki cryptoCertum3PKCS.dll, które jest dedykowana właśnie do tych nowych kart i z nią już wszystko działa poprawnie.... myślę, że informacja przyda się może jakimś developerom :)
Pozdr.
Witam
Przede wszystkim - limit jednoczesnych sesji jest normalną praktyką i może wynikać np. z fizycznych ograniczeń karty. To NIE JEST ustawienie, ile razy jedna aplikacji może poprosić o dostęp do kluczy zawartych na karcie - to jest ustawienie, ile równoległych sesji można utrzymywać z kartą. W praktyce nie widzę potrzeby utrzymywania więcej niż jednej.
Podejrzewam tutaj bardziej błąd programistyczny (nie zamykanie sesji po zakończeniu korzystania z karty i inicjowanie nowej sesji do każdej operacji) - nie wiem, czy na poziomie javowego API, czy gdzieś w kodzie aplikacji. Korzystanie z IAIKowego pkcs#11-wrappera nie wykazuje takich problemów. Korzystanie z biblioteki z poziomu C/C++ także - z tego co pamiętam - tego typu trudności nie przysparzało.
API Sunowego nie używałem.
> Ciekawe jak to firma Unizeto chce rozwiązać w swoich programach, jeżeli
> będzie musiała skorzystać z Javy, np w obsłudze skrzynki podawczej?
Działa.
Pozdrawiam.
Ciekawe jak to rozwiązaliśmy? Wiec tak:
Większość naszego oprogramowania opiera sie na technologii Java - Polecam zawartość działu download z Cerum.pl. Z IAIK nie ma takich problemów - wystarczy zakończyć bieżącą sesję, lub sprawdzić czy inna jest otwarta, tuż przed otwarciem nowej.
Co do 'problemu' to całkowicie zgadzam lklimek.
PS. a skrzynka podawcza działa bezproblemowo.
Pozdrawiam.