How to create cert stores for ReloadingKeyManagerFactoryTest

Need the following cert stores:

  • server.keystore
  • client-original.keystore
  • client-alternate.keystore
  • server.truststore: trusts client-original.keystore and client-alternate.keystore
  • client.truststore: trusts server.keystore

We shouldn't need any signing requests or chains of trust, since truststores are just including certs directly.

First create the three keystores:

$ keytool -genkeypair -keyalg RSA -alias server -keystore server.keystore -dname "CN=server" -storepass changeit -keypass changeit
$ keytool -genkeypair -keyalg RSA -alias client-original -keystore client-original.keystore -dname "CN=client-original" -storepass changeit -keypass changeit
$ keytool -genkeypair -keyalg RSA -alias client-alternate -keystore client-alternate.keystore -dname "CN=client-alternate" -storepass changeit -keypass changeit

Note that we need to use -keyalg RSA because keytool‘s default keyalg is DSA, which TLS 1.3 doesn’t support. If DSA is used, the handshake will fail due to the server not being able to find any authentication schemes compatible with its x509 certificate (“Unavailable authentication scheme”).

Then export all the certs:

$ keytool -exportcert -keystore server.keystore -alias server -file server.cert -storepass changeit
$ keytool -exportcert -keystore client-original.keystore -alias client-original -file client-original.cert -storepass changeit
$ keytool -exportcert -keystore client-alternate.keystore -alias client-alternate -file client-alternate.cert -storepass changeit

Then create the server.truststore that trusts the two client certs:

$ keytool -import -file client-original.cert -alias client-original -keystore server.truststore -storepass changeit
$ keytool -import -file client-alternate.cert -alias client-alternate -keystore server.truststore -storepass changeit

Then create the client.truststore that trusts the server cert:

$ keytool -import -file server.cert -alias server -keystore client.truststore -storepass changeit