RFR: 8325766: Review seclibs tests for cert expiry [v4]

Matthew Donovan mdonovan at openjdk.org
Wed Aug 27 11:26:45 UTC 2025


On Tue, 3 Jun 2025 17:29:13 GMT, Sean Mullan <mullan at openjdk.org> wrote:

>> As a constructor, the code would look like this
>> 
>> 
>> public CertificateBuilder(String subjectName,
>>                               PublicKey publicKey, PublicKey caKey, KeyUsage... keyUsages)
>>             throws CertificateException, IOException {
>>         factory = CertificateFactory.getInstance("X.509");
>>         SecureRandom random = new SecureRandom();
>> 
>>         boolean [] keyUsage = new boolean[KeyUsage.values().length];
>>         for (KeyUsage ku : keyUsages) {
>>             keyUsage[ku.ordinal()] = true;
>>         }
>> 
>>         this.subjectName = new X500Principal(subjectName);
>>         this.publicKey = Objects.requireNonNull(publicKey, "Caught null public key");
>>         notBefore = (Date)Date.from(Instant.now().minus(1, ChronoUnit.HOURS));
>>         notAfter = Date.from(Instant.now().plus(1, ChronoUnit.HOURS));
>>         serialNumber = BigInteger.valueOf(random.nextLong(1000000)+1);
>>         byte[] keyIdBytes = new KeyIdentifier(publicKey).getIdentifier();
>>         Extension e = new SubjectKeyIdentifierExtension(keyIdBytes);
>>         extensions.put(e.getId(), e);
>> 
>>         KeyIdentifier kid = new KeyIdentifier(caKey);
>>         e = new AuthorityKeyIdentifierExtension(kid, null, null);
>>         extensions.put(e.getId(), e);
>> 
>>         if (keyUsages.length != 0) {
>>             e = new KeyUsageExtension(keyUsage);
>>             extensions.put(e.getId(), e);
>>         }
>>     }
>> 
>> 
>> 
>>>   it also means I can't use this method to to create a certificate with a longer, or shorter validity period
>> 
>> There are methods to set the not-before and not-after fields. Any field set in this static method can be changed:
>> 
>> `
>> newCertificateBuilder(...).notAfter(Date.from(Instant.now().plus(10, TimeUnit.YEARS)));
>> `
>> 
>> I don't like using `Date` here and would be happy to overload it to take `Instant` as well.
>
>> As a constructor, the code would look like this
> 
> <snip>
> 
> Ah, I see. Well technically you could call the set methods from the ctor but you would get `this-escape` compiler warnings, which you probably want to avoid.
> 
>> > it also means I can't use this method to to create a certificate with a longer, or shorter validity period
>> 
>> There are methods to set the not-before and not-after fields. Any field set in this static method can be changed:
>> 
>> `newCertificateBuilder(...).notAfter(Date.from(Instant.now().plus(10, TimeUnit.YEARS)));`
>> 
>> I don't like using `Date` here and would be happy to overload it to take `Instant` as well.
> 
> Yes, but I don't think the static method which is generically named `newCertificateBuilder` should be hard-coding a one hour validity period, that detail should be either in a different method (my preference) or this method should be named more clearly like `oneHourCertificateBuilder`. I realize this is just a test method, but this is a nicely designed API that has been very useful so I would prefer if we keep the flexibility.

I removed the default one-hour validity from the builder method and created a `setOneHourValidity()` method.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/23700#discussion_r2303642791


More information about the security-dev mailing list