The storepass and the keypass are usually the same but they are independent. If the Mac is there and a non-null storepass is provided at loading, then integrity checking is performed. We do allow storepass being null in KeyStore::load and the method spec says:
* @param password the password used to check the integrity of * the keystore, the password used to unlock the keystore, * or {@code null} And now we support password-less pkcs12, i.e. key is protected, by cert is not, and there is no Mac. --Max > On Jun 3, 2019, at 10:53 PM, Michael StJohns <mstjo...@comcast.net> wrote: > > On 6/3/2019 10:18 AM, Sean Mullan wrote: >> On 6/2/19 10:28 PM, Weijun Wang wrote: >>> I am playing with KeyStore.Entry.Attribute and found out it's only >>> retrievable with Entry::getAttributes. This means for a PrivateKeyEntry >>> that is protected with a password, you will have to provide that password >>> to get the entry first to get the attributes. >>> >>> Is this by design? So there is no way to add public attributes to these >>> entries? If I read PKCS12 correctly, the attributes is out of the bag >>> value. Therefore even if I cannot decrypt a pkcs8ShroudedKeyBag, the >>> attributes are still visible. >>> >>> Or am I missing something? >> >> Probably not. Maybe we need something like a KeyStore.getAttributes(String >> alias) method? >> >> --Sean > > From what I remember, the whole thing of the PKCS12 is protected by a MAC > which is calculated from the PKCS12 password which is generally the same as > the PKCS8 password for the entry. This is somewhat the same model that was > in place for the JKS version of the key store. Is it possible that the > password is necessary to validate the attribute integrity and that's why it's > there? > > Mike > >