Update is looking good, just a few more comments ...
* java.security
1066 # The following parameters, if configured, are used by the PKCS12
KeyStore
1067 # implementation during the creation of a new keystore. Several of the
1068 # properties may also be used when modifying an existing keystore.
If you use the KeyStore API and specify your own algorithms, the API
algorithms supersede these properties. Maybe you should say something
about that, that these properties can be overridden by the API.
Otherwise it may sound like they are always used.
1094 # iteration count not an integer, or an unknown algorithm name, an
exception
Slight wording suggestion: "an iteration count that is not an integer, ..."
1098 # It is not guaranteed to be examined and used by other
implementations.
s/It is/They are/
1100 # The iteration count used by the PBE algorithm encrypting a
certificate.
Slight wording suggestion: s/encrypting/when encrypting/. Same comment
on line 1104.
1104 # The iteration count used by the PBE algorithm encrypting a
private key.
should this be "private key or secret key"?
1122 keystore.pkcs12.certProtectionAlgorithm = PBEWithSHA1AndRC2_40
Shouldn't this be named certPbeAlgorithm so that it matches
certPbeIterationCount? Same comment about keyProtectionAlgorithm.
1124 # The Mac algorithm. This can be any HmacPBE algorithm defined in
the Mac
I would add a little bit more description as to what this Mac algorithm
is used for.
Also, I would probably order these differently. I think it makes more
sense to have the algorithms listed first, followed by parameters that
affect them:
keystore.pkcs12.certProtectionAlgorithm
keystore.pkcs12.certPbeIterationCount
keystore.pkcs12.keyProtectionAlgorithm
keystore.pkcs12.keyPbeIterationCount
keystore.pkcs12.macAlgorithm
keystore.pkcs12.macIterationCount
* PKCS12KeyStore.java
145 private static final int PBE_ITERATION_COUNT
146 = getPkcs12Setting("pbeIterationCount", 50000);
Shouldn't there be 2 constants above, one for certPbeIterationCount and
one for keyPbeIterationCount?
208 String name2 = "keystore.PKCS12." + type;
I'm not sure checking the property name with uppercase PKCS12 is
necessary. I think we should assume that the property name is
case-sensitive, as most properties are.
2108 // What shall we do if there is
ENCRYPTED_DATA_OID but
2109 // we do not have a password?
This section of comments (thru line 2123) should really be reworded to
say what the current implementation does and perhaps allude to why it is
not perfect but is probably the best option. Right now it reads too much
like a brainstorming session :)
--Sean
On 9/25/18 6:49 AM, Weijun Wang wrote:
Webrev updated at http://cr.openjdk.java.net/~weijun/8076190/webrev.03/.
Mostly spec changes. The test is enhanced a little to check for macAlg interop.
On Sep 24, 2018, at 11:15 PM, Sean Mullan <sean.mul...@oracle.com> wrote:
Right, I understand their usage and the properties are well documented. My comment is
that if you just read the first sentence which is typically a summary sentence, it gives
no indication that some of these properties may also be used when modifying a keystore.
You have to read further to figure that out, and that might be missed. Perhaps if you
added a second sentence to the first paragraph: "Several of the properties may also
be used when modifying an existing keystore." Then the next paragraph starts ...
Good.
The default alg values seem somewhat weak. Can we upgrade them or is there a
compatibility issue/risk?
It will be addressed in a different RFE and is not related to migrating cacerts
to password-less.
I haven't studied it yet. Need to investigate how current releases of various
tools (openssl, browsers...) support it.
Ok.
Still need to review PKCS12KeyStore, but here are some more comments:
* java.security
You should probably say that these properties are specific to the JDK PKCS12
KeyStore implementation and may not be supported by other PKCS12
implementations.
What happens if the properties are not set or are set to the empty String?
When not set, there is a default value. It happens to be the same as what the
out-of-box java.security shows.
When empty, there will be an error. Say, NumberFormatException,
NoSuchAlgorithmException.
Are the algorithm names case-insensitive?
Should be case-insensitive. For each one, I've specified it as "algorithm defined in
the XYZ section of standard names". Is that enough to show it's case-insensitive?
What if illegal values, or unknown algorithms are set for the properties? Are
they ignored? Do they throw an Exception? Or do they fallback to hard-coded
defaults? This behavior should be specified.
Throw an exception. I cannot guarantee when it will be thrown so I just say "when
it's used".
* Passwordless
Can you add some comments as to why openssl is needed? Aren't there some tests
you can still do if it is not there? And maybe add some comments in the class
description as to what the test is generally testing as it hard to discern that
from just scanning the code.
Interoperability. I generate pkcs12 keystores from openssl using various
settings and make sure keytool can read them, vice versa. Maybe I should move
it to the infra test group.
Thanks
Max
--Sean