> On Jun 12, 2020, at 5:37 AM, Weijun Wang <weijun.w...@oracle.com> wrote:
> 
> I re-read the CSR.
> 
> The precise meaning of the 2 options for -printcert is: "If the cert is a 
> trusted certificate in either keystore or cacerts, we will not warn if it 
> uses a weak signature algorithm". This is so subtle and I wonder it's worth 
> describing it. Or we just say "This command does not check for the weakness 
> of a certificate's signature algorithm if it's a trusted certificate in the 
> user keystore (specified by -keystore) or the `cacerts` keystore (if 
> -trustcacerts is specified)”.

Updated CSR with the second mentioned.

> 
> For -printcrl, the "issuer CA" is a little confusing. I would say "This 
> commands attempts to verify the CRL using a certificate from the user 
> keystore (specified by -keystore) or the `cacerts` keystore (if -trustcacerts 
> is specified), and print out a warning if it cannot be verified”.

CRL issuer is usually the CA, and the implementation of -printcrl tries to get 
its issuer from the user or cacerts keystore. Updated CSR as suggested as if 
there may be confusing.

Thanks,
Hai-May

> 
> Thanks,
> Max
> 
> p.s. A new kind of check comes to my mind. Suppose you are printing a 
> certificate whose own key is 2048-bit RSA, signature is using SHA256withRSA, 
> but the signer key is only 512 bits (we can notice this from the size of the 
> signature). Shall we print out a warning? 

Your thought?

> 
>> On Jun 11, 2020, at 11:21 AM, Weijun Wang <weijun.w...@oracle.com> wrote:
>> 
>> "to a self-signed certificate in the keystore". This is not correct. What we 
>> look for is a TrustedCertificateEntry.
>> 
>> "It emits warning when a certificate is not trusted and uses weak 
>> algorithms". Precisely, it's "uses a weak signature algorithm".
>> 
>> --Max
>> 
>> 
>>> On Jun 10, 2020, at 5:31 PM, Hai-May Chao <hai-may.c...@oracle.com> wrote:
>>> 
>>> 
>>> 
>>>> On Jun 9, 2020, at 5:58 PM, Weijun Wang <weijun.w...@oracle.com> wrote:
>>>> 
>>>> Good to see both -keystore and -trustcacerts mentioned. Some comments:
>>>> 
>>>> 1. I think there is no need to say "from -file cert_file". Or, do you mean 
>>>> the new function does not apply to those from -sslserver and -jarfile? If 
>>>> so, that might be a problem.
>>> 
>>> You’re right. Removed it.
>>> 
>>>> 
>>>> 2. While you said "attempts to construct a chain of trust", do you also 
>>>> want to describe what happens if it succeeds or fails?
>>> 
>>> Updated manpage.
>>> 
>>>> 
>>>> 3. It will be nice if you can include the exact diff of the man page files 
>>>> either inside the CSR itself or as a comment.
>>>> 
>>> 
>>> Included the diff of the manpage in the CSR.
>>> 
>>> Thanks,
>>> Hai-May
>>> 
>>> 
>>>> Thanks,
>>>> Max
>>>> 
>>>>> On Jun 9, 2020, at 10:51 PM, Hai-May Chao <hai-may.c...@oracle.com> wrote:
>>>>> 
>>>>> 
>>>>> 
>>>>>> On Jun 7, 2020, at 6:08 PM, Weijun Wang <weijun.w...@oracle.com> wrote:
>>>>>> 
>>>>>> Looks fine to me.
>>>>>> 
>>>>>> For CSR, since there is already a "Note" there for these 2 options, you 
>>>>>> can add a few words about what -keystore and -trustcacerts can do.
>>>>> 
>>>>> Updated CSR as suggested.
>>>>> 
>>>>> Thanks,
>>>>> Hai-May
>>>>> 
>>>>> 
>>>>>> 
>>>>>> Thanks,
>>>>>> Max
>>>>>> 
>>>>>>> On Jun 8, 2020, at 4:01 AM, Hai-May Chao <hai-may.c...@oracle.com> 
>>>>>>> wrote:
>>>>>>> 
>>>>>>> Updated webrev -
>>>>>>> 
>>>>>>> https://cr.openjdk.java.net/~hchao/8244148/webrev.02/
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Hai-May
>>>>>>> 
>>>>>>> 
>>>>>>>> On Jun 5, 2020, at 11:04 PM, Weijun Wang <weijun.w...@oracle.com> 
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> I still think duplicated commands in TrustedCert.java are useless. 
>>>>>>>> Line 104 and line 133 are exactly the same, line 109 and line 138 are 
>>>>>>>> exactly the same, and you haven't made any change to these 2 files in 
>>>>>>>> between.
>>>>>>>> 
>>>>>>>> Same for line 80 and line 96 of TrustedCRL.java.
>>>>>>>> 
>>>>>>>> Everything else is fine.
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Max
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On Jun 6, 2020, at 2:25 AM, Hai-May Chao <hai-may.c...@oracle.com> 
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> Updated webrev - 
>>>>>>>>> 
>>>>>>>>> https://cr.openjdk.java.net/~hchao/8244148/webrev.01/
>>>>>>>>> 
>>>>>>>>> Added one command line -importcert in TrustCert.java.
>>>>>>>>> Added createCacerts() in test/lib SecurityTools.java.
>>>>>>>>> 
>>>>>>>>> Thanks,
>>>>>>>>> Hai-May
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> On Jun 4, 2020, at 5:57 AM, Weijun Wang <weijun.w...@oracle.com> 
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> On Jun 4, 2020, at 7:29 PM, Hai-May Chao <hai-may.c...@oracle.com> 
>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> Hi Max,
>>>>>>>>>>> 
>>>>>>>>>>>> On Jun 3, 2020, at 12:59 AM, Weijun Wang <weijun.w...@oracle.com> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> The source change looks fine to me.
>>>>>>>>>>>> 
>>>>>>>>>>>> In TrustedCert.java:
>>>>>>>>>>>> 
>>>>>>>>>>>> - You can use FileOutputStream and Files.copy(Path,OutputStream) 
>>>>>>>>>>>> in cat().
>>>>>>>>>>> 
>>>>>>>>>>> This cat() is taken from WealAlg.java.
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> - There is no need to recreate root.jks and root.pem.
>>>>>>>>>>> 
>>>>>>>>>>> The sequences of the commands used in this test scenario allows me 
>>>>>>>>>>> to test -printcert for the -trustcacerts and -keytsore options. We 
>>>>>>>>>>> had discussion offline about it. The test uses trusted certificates 
>>>>>>>>>>> and checks no warnings on the weak algorithms to address the 
>>>>>>>>>>> requirement described in the bug. I believe it does serve that 
>>>>>>>>>>> purpose, and looks legitimate to me. There could be different ways 
>>>>>>>>>>> of testing a functionality, and please let me know if there is a 
>>>>>>>>>>> problem with the current approach.
>>>>>>>>>> 
>>>>>>>>>> I just meant that the keytool commands generating root.jks and 
>>>>>>>>>> root.pem are exactly the same and there is no need to recreate it.
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> Please also elaborate your comment about no need to recreate 
>>>>>>>>>>> root.jks and root.pem.
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> - Why not use -trustcacerts below?
>>>>>>>>>>>> 
>>>>>>>>>>>> 160         kt("-importcert -file server.pem -noprompt", 
>>>>>>>>>>>> "server.jks”);
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> Because here is to import the server (end-entity) cert, and it will 
>>>>>>>>>>> not make a difference for the test result whether to use the 
>>>>>>>>>>> -trustcacerts or not. It’s the ca (intermediate) cert needs to have 
>>>>>>>>>>> it in this test scenario. I intended to leave it out in #160 to 
>>>>>>>>>>> distinguish between server and ca certs.
>>>>>>>>>> 
>>>>>>>>>> OK.
>>>>>>>>>> 
>>>>>>>>>> Then how about we add a new command before line 155?
>>>>>>>>>> 
>>>>>>>>>> kt("-importcert -file ca.pem", "ca.jks").shouldNotHaveExitValue(0);
>>>>>>>>>> 
>>>>>>>>>> This would prove the "-trustcacerts" on line 155 is really useful.
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> - It's probably better to add a " " between cmd and options in 
>>>>>>>>>>>> patchcmd(). Same in TrustedCRL.java.
>>>>>>>>>>> 
>>>>>>>>>>> Ok, will change it.
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> In TrustedCRL.java:
>>>>>>>>>>>> 
>>>>>>>>>>>> - No need to recreate ks and ca.crl. Just call "-printcrl" with 
>>>>>>>>>>>> different options.
>>>>>>>>>>> 
>>>>>>>>>>> Same reply as above.
>>>>>>>>>> 
>>>>>>>>>> Same question as above.
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> - Why create using MD5withRSA? Do you meant to warn about the weak 
>>>>>>>>>>>> algorithm?
>>>>>>>>>>> 
>>>>>>>>>>> Yes, exactly, and it differentiates from the weak algorithm 
>>>>>>>>>>> SHA1withRSA used in root CA where no warning will be emitted. There 
>>>>>>>>>>> is another -gencrl in #119 without using MD5withRSA so I’d have two 
>>>>>>>>>>> test cases.
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Also I would suggest you create a dedicate method (maybe in 
>>>>>>>>>>>> SecurityTools.java) to create your own cacerts. There is no need 
>>>>>>>>>>>> to copy over the system cacerts, just make sure the file is 
>>>>>>>>>>>> created with the JKS storetype. We are thinking of upgrading the 
>>>>>>>>>>>> storetype of cacerts and it's nice to do this at a single place so 
>>>>>>>>>>>> we can modify it easily later.
>>>>>>>>>>> 
>>>>>>>>>>> I created a method in SecurityTools.java to create the own cacerts. 
>>>>>>>>>>> With this keystore, the subsequent importing a certificate reply 
>>>>>>>>>>> would not work. It turns out that its caks.size() is zero detected 
>>>>>>>>>>> at establishCertChain() in keytool/Main.java after root cert has 
>>>>>>>>>>> been imported to that cacerts. At this point I’d like to suggest a 
>>>>>>>>>>> separate bug be filed to cover the cacerts enhancement that you 
>>>>>>>>>>> suggested.
>>>>>>>>>> 
>>>>>>>>>> I meant creating the cacerts in one method, something like
>>>>>>>>>> 
>>>>>>>>>> void createCacerts(String ks, String... crt);
>>>>>>>>>> 
>>>>>>>>>> and you can call createCacerts("mycacerts", "root.crt") to create 
>>>>>>>>>> it. The method can call KeyStore APIs and not keytool commands.
>>>>>>>>>> 
>>>>>>>>>> BTW, what does caks.size() == 0 matter here?
>>>>>>>>>> 
>>>>>>>>>> Thanks,
>>>>>>>>>> Max
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Hai-May
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Max
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> On Jun 2, 2020, at 2:37 AM, Hai-May Chao 
>>>>>>>>>>>>> <hai-may.c...@oracle.com> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I’d like to request a review for:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8244148
>>>>>>>>>>>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8246269
>>>>>>>>>>>>> Webrev: http://cr.openjdk.java.net/~hchao/8244148/webrev.00/
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The change is to add the support of -trustcacerts and -keystore 
>>>>>>>>>>>>> options to -printcert and -princrl command for keytool. This 
>>>>>>>>>>>>> enables keytool to use the trusted certificates when verifying 
>>>>>>>>>>>>> untrusted artifacts that are signed by CAs. It also incorporates 
>>>>>>>>>>>>> Max’s change that consolidates the code to get the default 
>>>>>>>>>>>>> location of cacerts keystore.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Hai-May
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to