RFR: 8273236: keytool does not accurately warn about algorithms that are disabled but have additional constraints
Sean Mullan
mullan at openjdk.java.net
Fri Jan 14 16:34:27 UTC 2022
On Wed, 12 Jan 2022 02:15:45 GMT, Hai-May Chao <hchao at openjdk.org> wrote:
> `keytool` currently uses a simpler scheme in `DisabledAlgorithmConstraints` class when performing algorithm constraints checks. This change is to enhance `keytool` to make use of the new methods `DisabledAlgorithmConstraints.permits` with `CertPathConstraintsParameters` and `checkKey` parameters. For the keyusage in the EE certificate of a certificate chains, set the variant accordingly when calling `CertPathConstraintsParameters` constructor.
src/java.base/share/classes/sun/security/tools/keytool/Main.java line 2198:
> 2196: ("Certificate.chain.length.") + chain.length);
> 2197:
> 2198: X509Certificate[] xcerts = convertCerts(chain);
I think you can just cast to an `X509Certificate[]` instead of reparsing all the certificates, i.e.:
`X509Certificate[] xcerts = (X509Certificate[]) chain;`
src/java.base/share/classes/sun/security/tools/keytool/Main.java line 2259:
> 2257: }
> 2258: cpcp = new CertPathConstraintsParameters((X509Certificate)cert,
> 2259: null,null, null);
Nit - add space between `null,null`.
src/java.base/share/classes/sun/security/tools/keytool/Main.java line 5048:
> 5046: }
> 5047:
> 5048: private TrustAnchor findTrustAnchor(List<X509Certificate> chain) {
I would consider having an initial check that returns `null` if `chain.isEmpty()`. Not sure if that is a valid scenario, but it would avoid an `IndexOOBException` just in case.
src/java.base/share/classes/sun/security/tools/keytool/Resources.java line 486:
> 484: {"verified.by.s.in.s.weak", "Verified by %1$s in %2$s with a %3$s"},
> 485: {"whose.sigalg.disabled", "%1$s uses the %2$s signature algorithm which is considered a security risk and is disabled."},
> 486: {"whose.sigalg.usagesignedjar", "%1$s uses the %2$s signature algorithm which is considered a security risk and cannot be used to sign JARs after 2019-01-01."},
Instead of hard-coding "2019-01-01", we should extract this date from the `denyAfter` attribute of the `jdk.certpath.disabledAlgorithms` security property and pass it in as a parameter.
-------------
PR: https://git.openjdk.java.net/jdk/pull/7039
More information about the security-dev
mailing list