-Example------------------------------------------------------------------
sun.security.pkcs11.SunPKCS11 p =
new sun.security.pkcs11.SunPKCS11(configFileName);
Security.addProvider(p);
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(pin);
KeyStore.Builder builder =
KeyStore.Builder.newInstance("pkcs11",p ,pp);
KeyStore store = builder.getKeyStore();
...
store.setKeyEntry("pawel", _privKey, null, _chain); //blad
...
-blad----------------------------------------------------------------------
Exception in thread "main" java.security.KeyStoreException:
sun.security.pkcs11.wrapper.PKCS11Exception: CKR_TEMPLATE_INCOMPLETE
at sun.security.pkcs11.P11KeyStore.engineSetEntry(P11KeyStore.java:1067)
at sun.security.pkcs11.P11KeyStore.engineSetKeyEntry(P11KeyStore.java:443)
at java.security.KeyStore.setKeyEntry(Unknown Source)
at hex.pkcs11.Example3.main(Example3.java:88)
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception:
CKR_TEMPLATE_INCOMPLETE
at sun.security.pkcs11.wrapper.PKCS11.C_CreateObject(Native Method)
at sun.security.pkcs11.P11KeyStore.storePkey(P11KeyStore.java:1737)
at sun.security.pkcs11.P11KeyStore.engineSetEntry(P11KeyStore.java:1063)
... 3 more
---------------------------------------------------------------------------
Podejrzewam, ze blad jest spowodowany niewlasciwa konfiguracja pliku
pkcs11.config (czasem wystepuje jako pkcs11.cfg), ale oczywiscie moge
sie mylic.
Moje pliki pkcs11.config, na ktorych przeprowadzalem testy wygladaja
nastepujaco:
-plik1---------------------------------------------------------------------
name=CryptoCard
library=C:\WINNT\system32\CCPkiP11.dll
-plik2---------------------------------------------------------------------
name=CryptoCard
library=C:\WINNT\system32\CCPkiP11.dll
attributes(*,CKO_PRIVATE_KEY,*) = {
CKA_SENSITIVE=true
}
attributes(*,CKO_PRIVATE_KEY,*) = {
CKA_TOKEN=true
}
attributes(*,CKO_PRIVATE_KEY,*) = {
CKA_SIGN = true
}
attributes(*,CKO_PRIVATE_KEY,*) = {
CKA_PRIVATE=true
}
attributes(*,CKO_PRIVATE_KEY,*) = {
CKA_MODIFIABLE=true
}
attributes(*,CKO_PRIVATE_KEY,*) = {
CKA_DERIVE=false
}
attributes(*,CKO_CERTIFICATE,*) = {
CKA_TRUSTED=true
}
attributes(*,CKO_CERTIFICATE,*) = {
CKA_TOKEN=true
}
attributes(*,CKO_CERTIFICATE,*) = {
CKA_MODIFIABLE=true
}
attributes(*,CKO_CERTIFICATE,*) = {
CKA_PRIVATE=true
}
---------------------------------------------------------------------------
Pilnie potrzebuje pomocy
Pawel
> > Co rozumiesz przez nagrywanie kluczy na karcie? Nie bardzo rozumiem co
> chciales napisac, natomiast bede wdzieczny za kazda rade.
Nie pisałem nic o nagrywaniu kluczy na karte ale skoro pytasz:
klucze na karcie kryptograficznej mozesz umiescic na dwa sposoby:
-- wygenerowac je na karcie - to najwlasciwszy sposob bo klucz prywatny
nigdy nie opusci tej karty (to jedna z jej wlasciwosci).
-- wygenerowc klucze programowo (bez uzycia karty) - a nastepnie
"transferowac"
je na karte. Cos na wzór tego jak importujesz klucze oraz certyfikaty z
pliku PKCS#12 na karte.
Mała uwaga: generowanie klucze na karcie z poziomu javy przebiega tak
samo jak generowanie programowo, rozni sie jedynie typem providera i
magazynu kluczy.
Mam podejrzenia, że rzeczywiscie generujesz klucze na karcie.... :-)))
Uzywasz wyłącznie providera PKCS#11 ? Probowales juz setCertificateEntry ??
Marcin
Klucze generuje sam w programie i chce je zapisac na "czystej" karcie,
stad to setKeyEntry. Probowalem tez zapisywac przy pomocy setEntry z
analogicznym skutkiem.
pawel
Uzywam tylko providera PKCS#11 (SunPKCS11) i probuje zapisac do
keystore'a (na karcie) pozycje certyfikatu lub pozycje klucza zgodnie z
ponizszym kodem oraz kodem, ktory umiescilem w poprzedniej wiadomosci.
Wywolanie store.setCertificateEntry generuje blad.
-Example------------------------------------------------
sun.security.pkcs11.SunPKCS11 p =
new sun.security.pkcs11.SunPKCS11(configFileName);
Security.addProvider(p);
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(pin);
KeyStore.Builder builder =
KeyStore.Builder.newInstance("pkcs11",p ,pp);
KeyStore store = builder.getKeyStore();
...
store.setCertificateEntry("pawel",cert); //X505Certificate
...
-blad---------------------------------------------------
Exception in thread "main" java.security.KeyStoreException:
java.lang.UnsupportedOperationException: trusted certificates may only
be set by token initialization application
at sun.security.pkcs11.P11KeyStore.engineSetEntry(P11KeyStore.java:1005)
at
sun.security.pkcs11.P11KeyStore.engineSetCertificateEntry(P11KeyStore.java:502)
at java.security.KeyStore.setCertificateEntry(Unknown Source)
at hex.pkcs11.Example3.main(Example3.java:87)
Caused by: java.lang.UnsupportedOperationException: trusted certificates
may only be set by token initialization application
... 4 more
---------------------------------------------------------
Mam nadzieje, ze znajdziesz rade na moje problemy.
pawel
Nie uzywałem nigdy PKCS#11 Suna, ale... gdzie generujesz klucze ? Na
Wszystkie sa takie same - "pawel". Nie rozumiem celowosci tego
pytania... Ja raczej podejrzewam, ze wygenerowane bledy sugeruja blad w
konfiguracji pliku pkcs11.config. Niestety nie moge sobie z tym
poradzic, ani znalezc przykladow w sieci.
>sun.security.pkcs11.SunPKCS11 p =
> new sun.security.pkcs11.SunPKCS11(configFileName);
>Security.addProvider(p);
>KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(pin);
>KeyStore.Builder builder =
> KeyStore.Builder.newInstance("pkcs11",p ,pp);
>KeyStore store = builder.getKeyStore();
>
Co rozumiesz przez nagrywanie kluczy na karcie? Nie bardzo rozumiem co
chciales napisac, natomiast bede wdzieczny za kazda rade.
pawel
-Example------------------------------------------------------------------
sun.security.pkcs11.SunPKCS11 p =
new sun.security.pkcs11.SunPKCS11(configFileName);
Security.addProvider(p);
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(pin);
KeyStore.Builder builder =
KeyStore.Builder.newInstance("pkcs11",p ,pp);
KeyStore store = builder.getKeyStore();
...
store.setKeyEntry("pawel", _privKey, null, _chain); //blad
...
-blad----------------------------------------------------------------------
Exception in thread "main" java.security.KeyStoreException: