Hi John,

Updated Webrev -
https://cr.openjdk.java.net/~hchao/8244148/webrev.03/

> On Jun 11, 2020, at 1:45 AM, sha.ji...@oracle.com wrote:
> 
> Hi Hai-May,
> 
> On 2020/6/8 04:01, Hai-May Chao wrote:
>> Updated webrev -
>> 
>> https://cr.openjdk.java.net/~hchao/8244148/webrev.02/ 
>> <https://cr.openjdk.java.net/~hchao/8244148/webrev.02/>-- 
>> src/java.base/share/classes/sun/security/util/FilePaths.java
> Would it be better to use String.join() or even java.nio.file.Path to
> build the file path?
> 

The current code is based on the original code such as in KeyStoreUtil.java and 
is consistent with others.

> -- src/java.base/share/classes/sun/security/util/AnchorCertificates.java
> 55                 File f = new File(FilePaths.cacerts());
> ...
> 59                     try (FileInputStream fis = new FileInputStream(f)) {
> f is used only once, so it may be unnecessary.

This is the existing code struct which is working fine.

> 
> 56                 KeyStore cacerts;
> Though it's not in your change, would you mind to declare this variable
> in the try block? I just want to narrow the variable scope.

Done.

> 
> -- test/lib/jdk/test/lib/SecurityTools.java
> Could move method createCacerts() to 
> test/lib/jdk/test/lib/security/KeyStoreUtils.java?
> This class contains a set of methods for creating trust/key stores.
> And getCertFromFile() in test/lib/jdk/test/lib/security/CertUtils.java
> can load certificate from a file.

Moved the method createCacerts() to the suggested location under test/.
Tried to use getCertFromFile() and it did not work as it read from test.src. So 
we need to read the cert directly.

> 
> 289         int pos = 0;
> ...
> 294             for (String crt : crts) {
> If not using for-each style, pos can be declared in the for statement.

Ok, changed to not using for-each style.

> 
> --  
> test/jdk/sun/security/tools/keytool/fakecacerts/java.base/sun/security/util/FilePaths.java
> This patch can be used by other tests, so could you please move it to a
> common path? Like 
> test/jdk/sun/security/util/module_patch/java.base/sun/security/util/FilePaths.java

Moved the patch to the suggested location under test/.

> 
> 32     public static String cacerts() {
> 33         return "mycacerts";
> 34     }
> Could it be flexible for returning an alternative path?
> For example, accept a system property, say test.cacerts, for specifying
> an alternative path. mycacerts is the default value of this property.

Done.

Thanks,
Hai-May


> 
> Best regards,
> John Jiang
> 
>> 
>> Thanks,
>> Hai-May
>> 
>> 
>>> On Jun 5, 2020, at 11:04 PM, Weijun Wang <weijun.w...@oracle.com 
>>> <mailto: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 
>>>> <mailto:hai-may.c...@oracle.com>> wrote:
>>>> 
>>>> Updated webrev - 
>>>> 
>>>> https://cr.openjdk.java.net/~hchao/8244148/webrev.01/ 
>>>> <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> 
>>>>> <mailto:weijun.w...@oracle.com> wrote:
>>>>> 
>>>>> 
>>>>> 
>>>>>> On Jun 4, 2020, at 7:29 PM, Hai-May Chao <hai-may.c...@oracle.com> 
>>>>>> <mailto:hai-may.c...@oracle.com> wrote:
>>>>>> 
>>>>>> Hi Max,
>>>>>> 
>>>>>>> On Jun 3, 2020, at 12:59 AM, Weijun Wang <weijun.w...@oracle.com> 
>>>>>>> <mailto: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> 
>>>>>>>> <mailto:hai-may.c...@oracle.com> wrote:
>>>>>>>> 
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> I’d like to request a review for:
>>>>>>>> 
>>>>>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8244148 
>>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8244148>
>>>>>>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8246269 
>>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8246269>
>>>>>>>> Webrev: http://cr.openjdk.java.net/~hchao/8244148/webrev.00/ 
>>>>>>>> <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