At 04:34 AM 4/19/2010, Tomas Gustavsson wrote: >Hi, >Sorry being late, I was away on vacation. > >Yes in most cases we do use a custom PKCS11 config fil, with token=yes. If we >specify token=false would it still be a token object on the HSM finally?
Yes. The C_CopyObject turns the Session object into a Token object. and that happens as a side effect of the KeyStore.store operation. >For most HSMs we need to use a cusom PCKS11 config file, otherwise it is not >possible to generate key because the HSM will throw an error, usually >invalid_template. Does this happen for all keys or just for EC keys? >Cheers, >Tomas > > >Valerie (Yu-Ching) Peng wrote: >>If the default PKCS11 config is used, I'd expect that KeyPairGenerator to >>generate a "session" key and then SunPKCS11 keystore impl will do a >>C_CopyObject(...) w/ the desired alias. >>Is a custom PKCS11 config file used here? If yes, perhaps it specifies that >>token key be generated for key generation? >>Valerie >>On 03/31/10 17:51, Michael StJohns wrote: >>>KeyPairGenerator should be generating a "Session" key pair. >>> >>>When you write the key store object, the underlying function should do a >>>C_CopyObject from the Session object to a Token object. (Or from a software >>>key to a Token object). At that point, the template provided to >>>C_CopyObject should be able to reset the CKA_LABEL attribute to the alias. >>> >>>Let me look at the code and see what's going on and make further comments >>>tomorrow. >>> >>>Mike >>> >>> >>>At 03:26 AM 3/31/2010, Tomas Gustavsson wrote: >>> >>> >>>>Hi, >>>> >>>>Sorry if I misunderstood you. That is actually exactly how we do it, >>>> >>>>1. Use KeyPairGenerator with P11 provider to generate key pair. >>>>2. Create a keystore with the P11 provier. >>>>3. Generate a self signed certificate. >>>>4. keystore.setKeyEntry(myalias, privateKey, null, cert). >>>> >>>>The keys work fine to use in java. The issue is that in the HSM three >>>>objects are generated/stored. >>>>1. Private key - no alias >>>>2. Public key - no alias >>>>3. Certificate - myalias >>>> >>>>The reason for this is that the alias of the private and public keys are >>>>set in the HSM when the keys are generated (with the KeyPairGenerator). The >>>>HSMs do not allow an alias of a private key (in particular) to be changed >>>>after generation, so setKeyEntry can not change the empty alias of the >>>>private key object. >>>>This has been confirmed by technicians at AEP, but it works the same in >>>>nCipher, SafeNet and Utimaco, i.e. no alias on the private key object. >>>> >>>>If we want to use HSM vendors tools to manipulate objects this usually >>>>causes problems because they mostly rely on an alias. >>>> >>>>So finally :-) this is why an alias parameter to KeyPairGenerator would be >>>>useful. >>>> >>>>Cheers, >>>>Tomas >>>> >>>> >>>>On 03/30/2010 08:34 PM, Valerie (Yu-Ching) Peng wrote: >>>> >>>>>Why do you assume that the key is generated in software? >>>>>You use the KeyGenerator API to generate a key, this key can be >>>>>generated on the HSM if you have SunPKCS11 provider configured to be the >>>>>most preferred provider. This key should actually just encapsulate the >>>>>native key handle (not the actual value/encoding) which you can then >>>>>pass it to the KeyStore API and specify an alias. The PKCS11 keystore >>>>>impl would then take this key object (with the native key handle) and >>>>>create a persistent copy on the HSM with the specified alias. >>>>> >>>>>Regards, >>>>>Valerie >>>>> >>>>>On 03/29/10 22:57, Tomas Gustavsson wrote: >>>>> >>>>>>Hi, thanks for the answer. >>>>>> >>>>>>Generating a key in software and trying to store it on the HSM violates >>>>>>the whole idea of using an HSM. Which is to generate and maintain the >>>>>>keys in the HSM at all times. >>>>>>Most high security policies *requires* that the keys are generated by >>>>>>the HSM, inside the HSM. >>>>>>I also doubt that it would work to store software generated keys using >>>>>>the keytool API. Many HSMs even forbid this, at least when running in >>>>>>strict FIPS mode. >>>>>> >>>>>>Regards, >>>>>>Tomas >>>>>> >>>>>>Valerie Peng wrote: >>>>>> >>>>>> >>>>>>>Have you tried saving that key through the KeyStore API which allows you >>>>>>>to specify an alias? >>>>>>>Thanks, >>>>>>>Valerie >>>>>>> >>>>>>>On 03/26/10 00:05, Tomas Gustavsson wrote: >>>>>>> >>>>>>> >>>>>>>>Slightly off topic. >>>>>>>>Something I would like to see is API support for setting aliases when >>>>>>>>using the KeyPairGenerator. This is due to the fact that many HSMs do >>>>>>>>not allow changing an alias of private keys after they have been >>>>>>>>generated. Since the key pair generator sets a blank alias when using >>>>>>>>PKCS#11, HSM key pairs are left with no alias. >>>>>>>> >>>>>>>>You can set an alias by providing it using pkcs11 attributes through >>>>>>>>the provider, but that alias is provider global (for all generated key >>>>>>>>pairs) which is not very usable. >>>>>>>> >>>>>>>>Regards, >>>>>>>>Tomas >>>>>>>> >>>>>>>>On 03/26/2010 12:17 AM, Valerie Peng wrote: >>>>>>>> >>>>>>>> >>>>>>>>>Probably not. Unless explicitly specified through KeyStore APIs, >>>>>>>>>aliases >>>>>>>>>are constructed using the attributes values associated with the >>>>>>>>>keys/certs. Thus, this is probably due to some problem with the native >>>>>>>>>library which generated the keys/certs. >>>>>>>>>Valerie >>>>>>>>> >>>>>>>>>On 03/18/10 19:03, Weijun Wang wrote: >>>>>>>>> >>>>>>>>> >>>>>>>>>>Hi Valerie >>>>>>>>>> >>>>>>>>>>As described inhttp://forums.sun.com/thread.jspa?threadID=5432248, >>>>>>>>>>customer's pkcs11 keystore has aliases ended with '\0'. >>>>>>>>>> >>>>>>>>>>Is this something we should fix on the Java side? >>>>>>>>>> >>>>>>>>>>Thanks >>>>>>>>>>Max >>>>>>>>>> >>>>>>>>>> >>> >>> >>>