in gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java [397:467]
private KeyStore getTrustStore(ClientContext clientContext) throws GeneralSecurityException {
KeyStore ks;
String truststorePass;
// if a PEM file was provided create a keystore from that and use
// it as the truststore
String pem = clientContext.connection().endpointPublicCertPem();
if (pem != null) {
// strip delimiters
if (pem.contains("BEGIN")) {
pem = pem.substring(BEGIN_CERTIFICATE.length()-1,
pem.indexOf(END_CERTIFICATE.substring(0, END_CERTIFICATE.length()-1)));
}
try {
byte[] bytes = Base64.decodeBase64(pem);
KeyStore keystore = KeyStore.getInstance(clientContext.connection().truststoreType());
keystore.load(null);
keystore.setCertificateEntry("knox-gateway", generateCertificateFromBytes(bytes));
return keystore;
} catch (IOException e) {
LOG.unableToLoadProvidedPEMEncodedTrustedCert(e);
}
}
discoverTruststoreDetails(clientContext);
File file = new File(clientContext.connection().truststoreLocation());
if (file.exists()) {
truststorePass = clientContext.connection().truststorePass();
} else {
String truststore = System.getProperty("javax.net.ssl.trustStore");
truststorePass = System.getProperty("javax.net.ssl.trustStorePassword", "changeit");
if (truststore == null) {
String truststoreDir = System.getProperty("java.home");
truststore = truststoreDir + File.separator + "lib" + File.separator
+ "security" + File.separator + "cacerts";
}
file = new File(truststore);
}
if (file.exists()) {
try (InputStream is = Files.newInputStream(file.toPath())) {
ks = KeyStore.getInstance(clientContext.connection().truststoreType());
ks.load(is, truststorePass.toCharArray());
} catch (KeyStoreException e) {
throw new KnoxShellException("Unable to create keystore of expected type.", e);
} catch (FileNotFoundException e) {
throw new KnoxShellException("Unable to read truststore."
+ " Please import the gateway-identity certificate into the JVM"
+ " truststore or set the truststore location ENV variables.", e);
} catch (NoSuchAlgorithmException e) {
throw new KnoxShellException("Unable to load the truststore."
+ " Please import the gateway-identity certificate into the JVM"
+ " truststore or set the truststore location ENV variables.", e);
} catch (CertificateException e) {
throw new KnoxShellException("Certificate cannot be found in the truststore."
+ " Please import the gateway-identity certificate into the JVM"
+ " truststore or set the truststore location ENV variables.", e);
} catch (IOException e) {
throw new KnoxShellException("Unable to load truststore."
+ " May be related to password setting or truststore format.", e);
}
} else {
throw new KnoxShellException("Unable to find a truststore for secure login."
+ "Please import the gateway-identity certificate into the JVM"
+ " truststore or set the truststore location ENV variables.");
}
return ks;
}