- KIR (SZAFIR) / SIGILLUM (PWPW) - ccpkip11.dll (taka samą nazwę pliku, ale inną lokalizację ma sterownik karty 64-bit),
- UNIZETO (CERTUM) - cryptoCertum3PKCS.dll (taka samą nazwę pliku, ale inną lokalizację ma sterownik karty 64-bit. Dla starszych kart - numery ośmiocyfrowe - jest sterownik karty o nazwie cryptoCertumPKCS11.dll),
- MOBICERT - dla nowszych kart Siemensa od połowy 2010 roku - cmp11.dll i cmp1164.dll (dla systemów 64-bit),
- CENCERT - enigmap11.dll i enigmap11-x64.dll (dla systemów 64-bit).
Na początku do obsługi standardu PKCS#11 wykorzystywałem standardową implementację firmy Sun (teraz Oracle). Jednak ze względu na liczne problemy (czasami nawet losowo pojawiające się błędy), zacząłem wykorzystywać bibliotekę IAIK. Teraz mogę w prosty sposób dostać się do listy kluczy publicznych (bez konieczności podawania PIN-u do karty). Wcześniej musiałem z góry znać numer slotu (później nauczyłem się wcześniej odczytywać odpowiedni numer slotu, jednak wymagało to nie lada kombinacji).
Jedyną wadą jest konieczność dołączania nowego jara (iaikPkcs11wrapper.jar) i biblioteki dll do systemu obsługującego karty (pkcs11wrapper.dll).
Czy udało się zdobyć enigmap11.dll dla 64 bitów ? Pozdrawiam
OdpowiedzUsuńTeraz jest dll dla 64-bitów - enigmap11-x64.dll. Tylko nie wiem po co, bo i tak wiekszość przeglądarek to 32-bitowe i wymagają 32-bitowej Javy.
UsuńNiestety nie. Ale są 2 opcje:
OdpowiedzUsuń1) napisać do nich może mają 64-bit bibliotekę dll
2) kazać używać Javy 32-bit na systemie 64-bit i wrzucić (jeżeli się samo nie wrzuca podczas instalacji ich oprogramowania) bibliotekę 32-bit) enigmap1.dll do katalogu SysWow64. I tak większość przeglądarek jest 32-bit i wymaga 32-bit Javy.
udało się zdobyć wersję dla 64bit w międzyczasie podesłali odpowiednią wersję. Natomiast narazie nie udaje mi się rozwiązać problemu z podłączeniem MOBICERT. Próbowałem z cmP11.dll i cmCSP.DLL...
OdpowiedzUsuńZ cmP11.dll nie miałem problemów.
OdpowiedzUsuńCześć,
OdpowiedzUsuńteż troszkę się bawię z tematem.
Czy mógłbyś podpowiedzieć w jaki sposób wczytywałeś numer slotu.
Aktualnie na moje potrzeby PKCS11 działa OK. Jedyny problem (poza tym że nie wiem jak pobrać numer slotu), to fakt, że ścieżka do pliku ze sterownikiem do karty nie może zawierać nawiasu(ów). Normalnie nie ma z tym problemów, chyba że się używa Windows 7 64Bit jak ja.
Do czasu Javy 1.7 to chyba był spory problem, aktualnie udało mi się zrobić tak, że przy pomocy funkcji systemowych winapi robię krótką scieżkę prowadzącą do sterownika i to mi zawsze działa OK (rozwiązanie z shortpath nie działało w javie 1.6).
Wracając do slotu, aktualnie dla kart CENCERT i UNIZETO u mnie wszystko działa OK, gdy podam slotListIndex = 0 ... jedynie dla KIRu wyszło w testach że muszę podać slotListIndex = 3, ale myślę że te wartości mogą się zmieniać, stąd
aby nie umknęło ponowię prośbę o podpowiedz w jaki sposób odczytać numer slotu.
Z góry dzięki
Pozdrawiam
Ze ścieżką i nawiasami też miałem problem.
OdpowiedzUsuńOdczytanie numeru slotu są 2 wyjścia:
1) używać biblioteki IAIK
2) przy wyszukiwaniu klucza publicznego zapisywać numer slotu pod który został wgrany (dot. dostawców KIR i SIGILLUM, przy reszcie po prostu nie podaję parametru slotListIndex).
Możesz napisać jak skracałeś tą ścieżkę żeby była bez nawiasów?
OdpowiedzUsuńDopiero zauważyłem Twój wpis ...
OdpowiedzUsuńŚcieżkę skracam przy pomocy natywnych funkcji WinAPI z Windows. Do winapi dostaję się korzystając z JNA.
[code]
public static String GetShortPathName(String path) {
byte[] shortt = new byte[256];
//Call CKernel32 interface to execute GetShortPathNameA method
int a = CKernel32.INSTANCE.GetShortPathNameA(path, shortt, 256);
String shortPath = Native.toString(shortt);
return shortPath;
}
public interface CKernel32 extends Kernel32 {
CKernel32 INSTANCE = (CKernel32) Native.loadLibrary("kernel32", CKernel32.class);
int GetShortPathNameA(String LongName, byte[] ShortName, int BufferCount);
}
[/code]
Skracanie scieżki stosujesz dla wszystkich ścieżek do dll czy tylko dla tej z (x86)?
Usuńskracam wszystkie
OdpowiedzUsuńMam natomiast pytanie do Ciebie dotyczące sygillum.
OdpowiedzUsuńTrafiłem na problem bo mój program Javowy działał poprawnie z: Unizeto, Cencert i KIR (reszty nie miałem okazji testować). Obecnie natknąłem się na PWPW i okazało się że nie działa. Co ciekawe chodzi dokładnie na tym samym driverze co KIR, ale w przypadku KIRu zadziałało mi nie podawanie slotu i iteracja po wszystkich slotach, natomiast w przypadku PWPW to nie chce działać. Znajduje się odpowidni slot, odczytuje mi się z karty certyfikat, itd, ale po wykonaniu:
C_Login..
ks = KeyStore.getInstance("PKCS11");
ks.load(null, pin);
wywala mi się z komunikatem load failed,
natomiast jak jawnie w configu podam slot = 3
to działa.
Chciałbym żeby to działało uniwersalnie, tzn bez podawania slotu, tylko żeby slot był poprawnie detektowany jak w innych kartach, ale na tę chwilę się zatrzymałem i nie wiem co z tym począć.
Z tego co wiem pwpw to jest sigillum. Ja już nie korzystam z Sunowego KeyStore.getInstance("PKCS11"), ale kod gdzieś mam i w poniedziałek napiszę jak to robiłem.
OdpowiedzUsuńDzięki,
OdpowiedzUsuńIstotnie jest to sigillum, ale najciekawsze jest to ze KIR to też sygillum, a karty KIRowskie mi chodza OK.
Może tak. Wg moje wiedzy w Polsce mamy 5-ciu dostawców: KIR, SIGILLUM, UNIZETO, MOBICERT, CENCERT.
OdpowiedzUsuńistotnie, masz rację, napisałem nieprecyzyjnie, KIR i SIGILLUM (PWPW) używają tych samych kart, cryptotech,
OdpowiedzUsuńznalazłeś może ten kawałek kodu, chętnie bym zerknął
patrz moj ostatni wpis :)
OdpowiedzUsuńwitam, czy wiesz może skąd ściągnąć ccpkip11.dll w wersji 32 i 64 bitowej
OdpowiedzUsuńNależy zainstalować CryptoCard Suite i donstalować dodatek CCSuiteX64.
UsuńSzczegóły tutaj: http://www.cryptotech.com.pl/Produkty/CryptoCard_Suite_Pobieranie,content.html
Ten komentarz został usunięty przez autora.
Usuńdzięki!! - podczas korzystania z certyfikatu KIR za każdym razem muszę wpisywać PIN do podpisu, czy istnieje możliwość zapamiiętania tego PINU ?? Mój kod poniżej:
OdpowiedzUsuńproperties.setProperty("KEY_STORE_SUPPORT_PROVIDER", "IAIK");
properties.setProperty("SLOT_ID", "3");
properties.setProperty("SESSION_POOL_MAX_SIZE", "100");
properties.setProperty("MULTI_THREAD_INIT", "true");
properties.setProperty("LOGIN_KEYSTORE_SESSION_ON_DEMAND", "false");
properties.setProperty("LOGIN_KEYSTORE_SESSION_ON_DEMAND", "false");
properties.setProperty("PKCS11_NATIVE_MODULE", driver);
jestem w stanie wymusić zapamniętanie PINu - podczas podpisywania wielu dokumentów jest to dość uciążliwe
UsuńGdy korzystasz z obsługi katy za pomocą PKCS#11 to musisz to obsłużyć sam.
Usuńa moge inaczej niz za pomoca pkcs#11 - potrzebna mi lista dostepnych certów od KIR plus prywatny klucz - moze masz jakis prostszy sposob??
UsuńMożna tak: http://javaczysen.blogspot.com/2012/10/sunmscapi.html
UsuńWitam Panow,
OdpowiedzUsuńwidze ze nie tylko ja noce spedzam na zglebianiu podpisu elektronicznego :)
Probuje podpisac edeklaracje xml uzywajac xades4j, czy ktorys z Panow ma doswiadczenie w tym temacie?
Niestety nie używałem tej biblioteki. Pewnie chodzi o podpis w formacie xades-bes.
UsuńTen komentarz został usunięty przez autora.
Usuń