mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 01:32:18 +02:00
Add check for ldap truststore password (#11055)
This commit is contained in:
parent
0d5a0ea681
commit
cbd2b5a022
@ -16,6 +16,7 @@
|
||||
// under the License.
|
||||
package org.apache.cloudstack.ldap;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Hashtable;
|
||||
|
||||
@ -24,6 +25,7 @@ import javax.naming.Context;
|
||||
import javax.naming.NamingException;
|
||||
import javax.naming.ldap.InitialLdapContext;
|
||||
import javax.naming.ldap.LdapContext;
|
||||
import java.security.KeyStore;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
@ -72,8 +74,36 @@ public class LdapContextFactory {
|
||||
if (sslStatus) {
|
||||
s_logger.info("LDAP SSL enabled.");
|
||||
environment.put(Context.SECURITY_PROTOCOL, "ssl");
|
||||
System.setProperty("javax.net.ssl.trustStore", _ldapConfiguration.getTrustStore(domainId));
|
||||
System.setProperty("javax.net.ssl.trustStorePassword", _ldapConfiguration.getTrustStorePassword(domainId));
|
||||
String trustStore = _ldapConfiguration.getTrustStore(domainId);
|
||||
String trustStorePassword = _ldapConfiguration.getTrustStorePassword(domainId);
|
||||
|
||||
if (!validateTrustStore(trustStore, trustStorePassword)) {
|
||||
throw new RuntimeException("Invalid truststore or truststore password");
|
||||
}
|
||||
|
||||
System.setProperty("javax.net.ssl.trustStore", trustStore);
|
||||
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean validateTrustStore(String trustStore, String trustStorePassword) {
|
||||
if (trustStore == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (trustStorePassword == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
KeyStore.getInstance("JKS").load(
|
||||
new FileInputStream(trustStore),
|
||||
trustStorePassword.toCharArray()
|
||||
);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
s_logger.warn("Failed to validate truststore: " + e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -186,6 +186,11 @@ public class LdapManagerImpl extends ComponentLifecycleBase implements LdapManag
|
||||
} catch (NamingException | IOException e) {
|
||||
LOGGER.debug("NamingException while doing an LDAP bind", e);
|
||||
throw new InvalidParameterValueException("Unable to bind to the given LDAP server");
|
||||
} catch (RuntimeException e) {
|
||||
if (e.getMessage().contains("Invalid truststore")) {
|
||||
throw new InvalidParameterValueException("Invalid truststore or truststore password");
|
||||
}
|
||||
throw e;
|
||||
} finally {
|
||||
closeContext(context);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user