RFR: 8284194: Allow empty subject fields in keytool

Jamil Nimeh jnimeh at openjdk.java.net
Wed May 11 22:51:49 UTC 2022


On Wed, 11 May 2022 21:55:45 GMT, Weijun Wang <weijun at openjdk.org> wrote:

> This code change allows one entering "." at a distinguished name prompt to skip a sub-component when running `keytool -genkeyapir`. Several new resource strings are added.
> 
> There is no detailed description in `keytool.html`, so I think there's no need to update it.
> 
> I'll file a CSR to describe the behavior change.
> 
> Here is an example after this change:
> 
> $ keytool -genkeypair -keystore ks -storepass changeit -alias b -keyalg EC
> Enter the distinguished name. Enter a single dot (.) to leave the sub-component empty.
> What is your first and last name?
>   [Unknown]:  .
> What is the name of your organizational unit?
>   [Unknown]:  .
> What is the name of your organization?
>   [Unknown]:  .
> What is the name of your City or Locality?
>   [Unknown]:  .
> What is the name of your State or Province?
>   [Unknown]:  .
> What is the two-letter country code for this unit?
>   [Unknown]:  .
> At least one field must be provided. Enter again.
> Enter the distinguished name. Enter a single dot (.) to leave the sub-component empty.
> What is your first and last name?
>   [EMPTY]:  Duke
> What is the name of your organizational unit?
>   [EMPTY]:
> What is the name of your organization?
>   [EMPTY]:
> What is the name of your City or Locality?
>   [EMPTY]:
> What is the name of your State or Province?
>   [EMPTY]:
> What is the two-letter country code for this unit?
>   [EMPTY]:
> Is CN=Duke correct?
>   [no]:  yes
> 
> Generating 384 bit EC (secp384r1) key pair and self-signed certificate (SHA384withECDSA) with a validity of 90 days
> 	for: CN=Duke
> 
> In the first round, "." is entered for all fields and keytool rejected it. In the second round, CN is entered but the others are unchanged (just type enter, because they are already entered previously). At the end, the name is "CN=Duke".

Looks pretty solid.  Just that one question about how to handle an errant space after the ".".  I think it might be fine to treat it literally as a dot-space combo.  If it was an error it would be caught by the user most likely at the check at the end of the DN entry loop.

src/java.base/share/classes/sun/security/tools/keytool/Main.java line 3781:

> 3779: 
> 3780:     private static String dotToNull(String input) {
> 3781:         return ".".equals(input) ? null : input;

Do we deal at all with leading/trailing whitespace (maybe more concerned about trailing whitespace than leading)?  What happens if we get a ". " (trailing space)?

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

PR: https://git.openjdk.java.net/jdk/pull/8667



More information about the security-dev mailing list