Author: markt Date: Wed May 6 21:30:54 2015 New Revision: 1678097 URL: http://svn.apache.org/r1678097 Log: Move the truststore attributes to SSLHostConfig Move as much of the default / fall-back code to SSLHostConfig rather than spreading it through JSSESocketFactory. This makes the defaults/fallbacks easier to read (in my view) and allowed some clean-up in JSSESocketFactory.
Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java tomcat/trunk/webapps/docs/config/http.xml Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java?rev=1678097&r1=1678096&r2=1678097&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11JsseProtocol.java Wed May 6 21:30:54 2015 @@ -28,29 +28,6 @@ public abstract class AbstractHttp11Jsse public String getSslProtocol() { return getEndpoint().getSslProtocol();} public void setSslProtocol(String s) { getEndpoint().setSslProtocol(s);} - public void setTruststoreFile(String f){ getEndpoint().setTruststoreFile(f);} - public String getTruststoreFile(){ return getEndpoint().getTruststoreFile();} - - public void setTruststorePass(String p){ getEndpoint().setTruststorePass(p);} - public String getTruststorePass(){return getEndpoint().getTruststorePass();} - - public void setTruststoreType(String t){ getEndpoint().setTruststoreType(t);} - public String getTruststoreType(){ return getEndpoint().getTruststoreType();} - - public void setTruststoreProvider(String t){ - getEndpoint().setTruststoreProvider(t); - } - public String getTruststoreProvider(){ - return getEndpoint().getTruststoreProvider(); - } - - public void setTruststoreAlgorithm(String a){ - getEndpoint().setTruststoreAlgorithm(a); - } - public String getTruststoreAlgorithm(){ - return getEndpoint().getTruststoreAlgorithm(); - } - public void setSessionCacheSize(String s){getEndpoint().setSessionCacheSize(s);} public String getSessionCacheSize(){ return getEndpoint().getSessionCacheSize();} Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java?rev=1678097&r1=1678096&r2=1678097&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java Wed May 6 21:30:54 2015 @@ -476,6 +476,35 @@ public abstract class AbstractHttp11Prot defaultSSLHostConfig.setCertificateKeyAlias(certificateKeyAlias); } + public void setTruststoreAlgorithm(String truststoreAlgorithm){ + registerDefaultSSLHostConfig(); + defaultSSLHostConfig.setTruststoreAlgorithm(truststoreAlgorithm); + } + + + public void setTruststoreFile(String truststoreFile){ + registerDefaultSSLHostConfig(); + defaultSSLHostConfig.setTruststoreFile(truststoreFile); + } + + + public void setTruststorePass(String truststorePassword){ + registerDefaultSSLHostConfig(); + defaultSSLHostConfig.setTruststorePassword(truststorePassword); + } + + + public void setTruststoreType(String truststoreType){ + registerDefaultSSLHostConfig(); + defaultSSLHostConfig.setTruststoreType(truststoreType); + } + + + public void setTruststoreProvider(String truststoreProvider){ + registerDefaultSSLHostConfig(); + defaultSSLHostConfig.setTruststoreProvider(truststoreProvider); + } + // ------------------------------------------------------------- Common code Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1678097&r1=1678096&r2=1678097&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Wed May 6 21:30:54 2015 @@ -16,7 +16,6 @@ */ package org.apache.tomcat.util.net; -import java.io.File; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -890,24 +889,6 @@ public abstract class AbstractEndpoint<S } - private String adjustRelativePath(String path, String relativeTo) { - // Empty or null path can't point to anything useful. The assumption is - // that the value is deliberately empty / null so leave it that way. - if (path == null || path.length() == 0) { - return path; - } - String newPath = path; - File f = new File(newPath); - if ( !f.isAbsolute()) { - newPath = relativeTo + File.separator + newPath; - f = new File(newPath); - } - if (!f.exists()) { - getLog().warn("configured file:["+newPath+"] does not exist."); - } - return newPath; - } - protected abstract Log getLog(); protected LimitLatch initializeConnectionLatch() { @@ -986,45 +967,6 @@ public abstract class AbstractEndpoint<S public String getSslProtocol() { return sslProtocol;} public void setSslProtocol(String s) { sslProtocol = s;} - private String truststoreFile = System.getProperty("javax.net.ssl.trustStore"); - public String getTruststoreFile() {return truststoreFile;} - public void setTruststoreFile(String s) { - truststoreFile = adjustRelativePath(s, - System.getProperty(Constants.CATALINA_BASE_PROP)); - } - - private String truststorePass = - System.getProperty("javax.net.ssl.trustStorePassword"); - public String getTruststorePass() {return truststorePass;} - public void setTruststorePass(String truststorePass) { - this.truststorePass = truststorePass; - } - - private String truststoreType = - System.getProperty("javax.net.ssl.trustStoreType"); - public String getTruststoreType() {return truststoreType;} - public void setTruststoreType(String truststoreType) { - this.truststoreType = truststoreType; - } - - private String truststoreProvider = null; - public String getTruststoreProvider() {return truststoreProvider;} - public void setTruststoreProvider(String truststoreProvider) { - this.truststoreProvider = truststoreProvider; - } - - private String truststoreAlgorithm = null; - public String getTruststoreAlgorithm() {return truststoreAlgorithm;} - public void setTruststoreAlgorithm(String truststoreAlgorithm) { - this.truststoreAlgorithm = truststoreAlgorithm; - } - - private String trustManagerClassName = null; - public String getTrustManagerClassName() {return trustManagerClassName;} - public void setTrustManagerClassName(String trustManagerClassName) { - this.trustManagerClassName = trustManagerClassName; - } - private String sessionCacheSize = null; public String getSessionCacheSize() { return sessionCacheSize;} public void setSessionCacheSize(String s) { sessionCacheSize = s;} Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java?rev=1678097&r1=1678096&r2=1678097&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java Wed May 6 21:30:54 2015 @@ -16,18 +16,23 @@ */ package org.apache.tomcat.util.net; +import java.io.File; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.TrustManagerFactory; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.net.jsse.openssl.OpenSSLCipherConfigurationParser; import org.apache.tomcat.util.res.StringManager; +/** + * Represents the TLS configuration for a virtual host. + */ public class SSLHostConfig { private static final Log log = LogFactory.getLog(SSLHostConfig.class); @@ -46,19 +51,26 @@ public class SSLHostConfig { // Common private String certificateKeyPassword = null; + private String certificateRevocationListFile; private CertificateVerification certificateVerification = CertificateVerification.NONE; private int certificateVerificationDepth = 10; private String ciphers = "HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA"; private boolean honorCipherOrder = false; private Set<String> protocols = new HashSet<>(); - private String certificateRevocationListFile; // JSSE private String certificateKeyAlias; private String certificateKeystorePassword = "changeit"; private String certificateKeystoreFile = System.getProperty("user.home")+"/.keystore"; - private String certificateKeystoreProvider; - private String certificateKeystoreType = "JKS"; + private String certificateKeystoreProvider = System.getProperty("javax.net.ssl.keyStoreProvider"); + private String certificateKeystoreType = System.getProperty("javax.net.ssl.keyStoreType"); private String keyManagerAlgorithm = KeyManagerFactory.getDefaultAlgorithm(); + private String trustManagerClassName; + private String truststoreAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); + private String truststoreFile = System.getProperty("javax.net.ssl.trustStore"); + private String truststorePassword = System.getProperty("javax.net.ssl.trustStorePassword"); + private String truststoreProvider = System.getProperty("javax.net.ssl.trustStoreProvider"); + private String truststoreType = System.getProperty("javax.net.ssl.trustStoreType"); + // OpenSSL private String certificateFile; private String certificateKeyFile; @@ -67,6 +79,10 @@ public class SSLHostConfig { public SSLHostConfig() { // Set defaults that can't be (easily) set when defining the fields. setProtocols("all"); + // Configure fall-back defaults if system property is not set. + if (certificateKeystoreType == null) { + certificateKeystoreType = "JKS"; + } } @@ -122,7 +138,7 @@ public class SSLHostConfig { public void setCertificateRevocationListFile(String certificateRevocationListFile) { - this.certificateRevocationListFile = certificateRevocationListFile; + this.certificateRevocationListFile = adjustRelativePath(certificateRevocationListFile); } @@ -246,7 +262,7 @@ public class SSLHostConfig { public void setCertificateKeystoreFile(String certificateKeystoreFile) { setProperty("certificateKeystoreFile", Type.JSSE); - this.certificateKeystoreFile = certificateKeystoreFile; + this.certificateKeystoreFile = adjustRelativePath(certificateKeystoreFile); } @@ -299,11 +315,85 @@ public class SSLHostConfig { } + public void setTrustManagerClassName(String trustManagerClassName) { + setProperty("trustManagerClassName", Type.JSSE); + this.trustManagerClassName = trustManagerClassName; + } + + + public String getTrustManagerClassName() { + return trustManagerClassName; + } + + + public void setTruststoreAlgorithm(String truststoreAlgorithm) { + setProperty("truststoreAlgorithm", Type.JSSE); + this.truststoreAlgorithm = truststoreAlgorithm; + } + + + public String getTruststoreAlgorithm() { + return truststoreAlgorithm; + } + + + public void setTruststoreFile(String truststoreFile) { + setProperty("truststoreFile", Type.JSSE); + this.truststoreFile = adjustRelativePath(truststoreFile); + } + + + public String getTruststoreFile() { + return truststoreFile; + } + + + public void setTruststorePassword(String truststorePassword) { + setProperty("truststorePassword", Type.JSSE); + this.truststorePassword = truststorePassword; + } + + + public String getTruststorePassword() { + return truststorePassword; + } + + + public void setTruststoreProvider(String truststoreProvider) { + setProperty("truststoreProvider", Type.JSSE); + this.truststoreProvider = truststoreProvider; + } + + + public String getTruststoreProvider() { + if (truststoreProvider == null) { + return getCertificateKeystoreProvider(); + } else { + return truststoreProvider; + } + } + + + public void setTruststoreType(String truststoreType) { + setProperty("truststoreType", Type.JSSE); + this.truststoreType = truststoreType; + } + + + public String getTruststoreType() { + if (truststoreType == null) { + return getCertificateKeystoreType(); + } else { + return truststoreType; + } + } + + // ------------------------------- OpenSSL specific configuration properties public void setCertificateFile(String certificateFile) { setProperty("certificateFile", Type.OPENSSL); - this.certificateFile = certificateFile; + this.certificateFile = adjustRelativePath(certificateFile); } @@ -314,7 +404,7 @@ public class SSLHostConfig { public void setCertificateKeyFile(String certificateKeyFile) { setProperty("certificateKeyFile", Type.OPENSSL); - this.certificateKeyFile = certificateKeyFile; + this.certificateKeyFile = adjustRelativePath(certificateKeyFile); } @@ -325,7 +415,7 @@ public class SSLHostConfig { public void setCertificateRevocationListPath(String certificateRevocationListPath) { setProperty("certificateRevocationListPath", Type.OPENSSL); - this.certificateRevocationListPath = certificateRevocationListPath; + this.certificateRevocationListPath = adjustRelativePath(certificateRevocationListPath); } @@ -334,6 +424,28 @@ public class SSLHostConfig { } + // --------------------------------------------------------- Support methods + + private String adjustRelativePath(String path) { + // Empty or null path can't point to anything useful. The assumption is + // that the value is deliberately empty / null so leave it that way. + if (path == null || path.length() == 0) { + return path; + } + String newPath = path; + File f = new File(newPath); + if ( !f.isAbsolute()) { + newPath = System.getProperty(Constants.CATALINA_BASE_PROP) + File.separator + newPath; + f = new File(newPath); + } + if (!f.exists()) { + // TODO i18n, sm + log.warn("configured file:["+newPath+"] does not exist."); + } + return newPath; + } + + // ----------------------------------------------------------- Inner classes public static enum Type { Modified: tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java?rev=1678097&r1=1678096&r2=1678097&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java Wed May 6 21:30:54 2015 @@ -83,12 +83,8 @@ public class JSSESocketFactory implement // Defaults - made public where re-used private static final String defaultProtocol = "TLS"; - private static final String defaultKeystoreType = "JKS"; - private static final String defaultKeystoreFile - = System.getProperty("user.home") + "/.keystore"; private static final int defaultSessionCacheSize = 0; private static final int defaultSessionTimeout = 86400; - public static final String DEFAULT_KEY_PASS = "changeit"; private final AbstractEndpoint<?> endpoint; private final SSLHostConfig sslHostConfig; @@ -185,70 +181,21 @@ public class JSSESocketFactory implement return ciphers.toArray(new String[ciphers.size()]); } - /* - * Gets the SSL server's keystore. - */ - protected KeyStore getKeystore(String type, String provider, String pass) - throws IOException { - - String keystoreFile = sslHostConfig.getCertificateKeystoreFile(); - if (keystoreFile == null) - keystoreFile = defaultKeystoreFile; - - return getStore(type, provider, keystoreFile, pass); - } /* * Gets the SSL server's truststore. */ - protected KeyStore getTrustStore(String keystoreType, - String keystoreProvider) throws IOException { + protected KeyStore getTrustStore() throws IOException { KeyStore trustStore = null; - String truststoreFile = endpoint.getTruststoreFile(); - if(truststoreFile == null) { - truststoreFile = System.getProperty("javax.net.ssl.trustStore"); - } - if(log.isDebugEnabled()) { - log.debug("Truststore = " + truststoreFile); - } - - String truststorePassword = endpoint.getTruststorePass(); - if( truststorePassword == null) { - truststorePassword = - System.getProperty("javax.net.ssl.trustStorePassword"); - } - if(log.isDebugEnabled()) { - log.debug("TrustPass = " + truststorePassword); - } - - String truststoreType = endpoint.getTruststoreType(); - if( truststoreType == null) { - truststoreType = System.getProperty("javax.net.ssl.trustStoreType"); - } - if(truststoreType == null) { - truststoreType = keystoreType; - } - if(log.isDebugEnabled()) { - log.debug("trustType = " + truststoreType); - } - - String truststoreProvider = endpoint.getTruststoreProvider(); - if( truststoreProvider == null) { - truststoreProvider = - System.getProperty("javax.net.ssl.trustStoreProvider"); - } - if (truststoreProvider == null) { - truststoreProvider = keystoreProvider; - } - if(log.isDebugEnabled()) { - log.debug("trustProvider = " + truststoreProvider); - } + String truststoreFile = sslHostConfig.getTruststoreFile(); + String truststoreType = sslHostConfig.getTruststoreType(); + String truststoreProvider = sslHostConfig.getTruststoreProvider(); if (truststoreFile != null){ try { trustStore = getStore(truststoreType, truststoreProvider, - truststoreFile, truststorePassword); + truststoreFile, sslHostConfig.getTruststorePassword()); } catch (IOException ioe) { Throwable cause = ioe.getCause(); if (cause instanceof UnrecoverableKeyException) { @@ -268,6 +215,7 @@ public class JSSESocketFactory implement return trustStore; } + /* * Gets the key- or truststore with the specified type, path, and password. */ @@ -283,12 +231,9 @@ public class JSSESocketFactory implement ks = KeyStore.getInstance(type, provider); } if(!("PKCS11".equalsIgnoreCase(type) || - "".equalsIgnoreCase(path))) { + "".equalsIgnoreCase(path)) || + "NONE".equalsIgnoreCase(path)) { File keyStoreFile = new File(path); - if (!keyStoreFile.isAbsolute()) { - keyStoreFile = new File(System.getProperty( - Constants.CATALINA_BASE_PROP), path); - } istream = new FileInputStream(keyStoreFile); } @@ -335,84 +280,31 @@ public class JSSESocketFactory implement return new JSSESSLContext(protocol); } + @Override public KeyManager[] getKeyManagers() throws Exception { String keystoreType = sslHostConfig.getCertificateKeystoreType(); - if (keystoreType == null) { - keystoreType = defaultKeystoreType; - } - - return getKeyManagers(keystoreType, sslHostConfig.getCertificateKeystoreProvider(), - sslHostConfig.getKeyManagerAlgorithm(), - sslHostConfig.getCertificateKeyAlias()); - } - - @Override - public TrustManager[] getTrustManagers() throws Exception { - String truststoreType = endpoint.getTruststoreType(); - if (truststoreType == null) { - truststoreType = System.getProperty("javax.net.ssl.trustStoreType"); - } - if (truststoreType == null) { - truststoreType = sslHostConfig.getCertificateKeystoreType(); - } - if (truststoreType == null) { - truststoreType = defaultKeystoreType; - } - - String algorithm = endpoint.getTruststoreAlgorithm(); - if (algorithm == null) { - algorithm = TrustManagerFactory.getDefaultAlgorithm(); - } - - return getTrustManagers(truststoreType, endpoint.getTruststoreProvider(), algorithm); - } - - @Override - public void configureSessionContext(SSLSessionContext sslSessionContext) { - int sessionCacheSize; - if (endpoint.getSessionCacheSize() != null) { - sessionCacheSize = Integer.parseInt( - endpoint.getSessionCacheSize()); - } else { - sessionCacheSize = defaultSessionCacheSize; - } - - int sessionTimeout; - if (endpoint.getSessionTimeout() != null) { - sessionTimeout = Integer.parseInt(endpoint.getSessionTimeout()); - } else { - sessionTimeout = defaultSessionTimeout; + String keystoreProvider = sslHostConfig.getCertificateKeystoreProvider(); + String keystoreFile = sslHostConfig.getCertificateKeystoreFile(); + String keystorePass = sslHostConfig.getCertificateKeystorePassword(); + String keyAlias = sslHostConfig.getCertificateKeyAlias(); + String algorithm = sslHostConfig.getKeyManagerAlgorithm(); + String keyPass = sslHostConfig.getCertificateKeyPassword(); + // This has to be here as it can't be moved to SSLHostConfig since the + // defaults vary between JSSE and OpenSSL. + if (keyPass == null) { + keyPass = sslHostConfig.getCertificateKeystorePassword(); } - sslSessionContext.setSessionCacheSize(sessionCacheSize); - sslSessionContext.setSessionTimeout(sessionTimeout); - } - - /** - * Gets the initialized key managers. - */ - protected KeyManager[] getKeyManagers(String keystoreType, - String keystoreProvider, - String algorithm, - String keyAlias) - throws Exception { - KeyManager[] kms = null; - String keystorePass = sslHostConfig.getCertificateKeystorePassword(); - - KeyStore ks = getKeystore(keystoreType, keystoreProvider, keystorePass); + KeyStore ks = getStore(keystoreType, keystoreProvider, keystoreFile, keystorePass); if (keyAlias != null && !ks.isKeyEntry(keyAlias)) { throw new IOException( sm.getString("jsse.alias_no_key_entry", keyAlias)); } KeyManagerFactory kmf = KeyManagerFactory.getInstance(algorithm); - String keyPass = sslHostConfig.getCertificateKeyPassword(); - if (keyPass == null) { - keyPass = keystorePass; - } kmf.init(ks, keyPass.toCharArray()); kms = kmf.getKeyManagers(); @@ -429,15 +321,14 @@ public class JSSESocketFactory implement return kms; } - /** - * Gets the initialized trust managers. - */ - protected TrustManager[] getTrustManagers(String keystoreType, - String keystoreProvider, String algorithm) - throws Exception { + + @Override + public TrustManager[] getTrustManagers() throws Exception { + String algorithm = sslHostConfig.getTruststoreAlgorithm(); + String crlf = sslHostConfig.getCertificateRevocationListFile(); - String className = endpoint.getTrustManagerClassName(); + String className = sslHostConfig.getTrustManagerClassName(); if(className != null && className.length() > 0) { ClassLoader classLoader = getClass().getClassLoader(); Class<?> clazz = classLoader.loadClass(className); @@ -452,20 +343,16 @@ public class JSSESocketFactory implement TrustManager[] tms = null; - KeyStore trustStore = getTrustStore(keystoreType, keystoreProvider); - if (trustStore != null || endpoint.getTrustManagerClassName() != null) { + KeyStore trustStore = getTrustStore(); + if (trustStore != null || className != null) { if (crlf == null) { - TrustManagerFactory tmf = - TrustManagerFactory.getInstance(algorithm); + TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm); tmf.init(trustStore); tms = tmf.getTrustManagers(); } else { - TrustManagerFactory tmf = - TrustManagerFactory.getInstance(algorithm); - CertPathParameters params = - getParameters(algorithm, crlf, trustStore); - ManagerFactoryParameters mfp = - new CertPathTrustManagerParameters(params); + TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm); + CertPathParameters params = getParameters(algorithm, crlf, trustStore); + ManagerFactoryParameters mfp = new CertPathTrustManagerParameters(params); tmf.init(mfp); tms = tmf.getTrustManagers(); } @@ -474,6 +361,28 @@ public class JSSESocketFactory implement return tms; } + @Override + public void configureSessionContext(SSLSessionContext sslSessionContext) { + int sessionCacheSize; + if (endpoint.getSessionCacheSize() != null) { + sessionCacheSize = Integer.parseInt( + endpoint.getSessionCacheSize()); + } else { + sessionCacheSize = defaultSessionCacheSize; + } + + int sessionTimeout; + if (endpoint.getSessionTimeout() != null) { + sessionTimeout = Integer.parseInt(endpoint.getSessionTimeout()); + } else { + sessionTimeout = defaultSessionTimeout; + } + + sslSessionContext.setSessionCacheSize(sessionCacheSize); + sslSessionContext.setSessionTimeout(sessionTimeout); + } + + /** * Return the initialization parameters for the TrustManager. * Currently, only the default <code>PKIX</code> is supported. Modified: tomcat/trunk/webapps/docs/config/http.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/http.xml?rev=1678097&r1=1678096&r2=1678097&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/http.xml (original) +++ tomcat/trunk/webapps/docs/config/http.xml Wed May 6 21:30:54 2015 @@ -1034,7 +1034,8 @@ <attribute name="certificateFile" required="true"> <p>OpenSSL only.</p> <p>Name of the file that contains the server certificate. The format is - PEM-encoded.</p> + PEM-encoded. Relative paths will be resolved against + <code>$CATALINA_BASE</code>.</p> </attribute> <attribute name="certificateKeyAlias" required="true"> @@ -1051,9 +1052,10 @@ <attribute name="certificateKeyFile" required="false"> <p>OpenSSL only.</p> <p>Name of the file that contains the server private key. The format is - PEM-encoded. The default value is the value of "SSLCertificateFile" and in - this case both certificate and private key have to be in this file (NOT - RECOMMENDED).</p> + PEM-encoded. The default value is the value of + <strong>certificateFile</strong> and in this case both certificate and + private key have to be in this file (NOT RECOMMENDED). Relative paths will + be resolved against <code>$CATALINA_BASE</code>.</p> </attribute> <attribute name="certificateKeyPassword" required="false"> @@ -1070,7 +1072,9 @@ certificate and key to be loaded. By default, the pathname is the file <code>.keystore</code> in the operating system home directory of the user that is running Tomcat. If your <code>keystoreType</code> doesn't need a - file use <code>""</code> (empty string) for this parameter.</p> + file use <code>""</code> (empty string) or <code>NONE</code> for this + parameter. Relative paths will be resolved against + <code>$CATALINA_BASE</code>.</p> </attribute> <attribute name="certificateKeystorePassword" required="false"> @@ -1083,16 +1087,21 @@ <attribute name="certificateKeystoreProvider" required="true"> <p>JSSE only.</p> <p>The name of the keystore provider to be used for the server - certificate. If not specified, the list of registered providers is - traversed in preference order and the first provider that supports the - <code>keystoreType</code> is used. + certificate. If not specified, the value of the system property + <code>javax.net.ssl.keyStoreProvider</code> is used. If neither this + attribute nor the system property are set, the list of registered + providers is traversed in preference order and the first provider that + supports the <code>keystoreType</code> is used. </p> </attribute> <attribute name="certificateKeystoreType" required="true"> <p>JSSE only.</p> <p>The type of keystore file to be used for the server certificate. - If not specified, the default value is "<code>JKS</code>".</p> + If not specified, the value of the system property + <code>javax.net.ssl.keyStoreType</code> is used. If neither this attribute + nor the system property are set, a default value of "<code>JKS</code>". is + used.</p> </attribute> <attribute name="certificateRevocationFile" required="false"> @@ -1100,13 +1109,15 @@ lists for the certificate authorities. The format is PEM-encoded. If not defined, client certificates will not be checked against a certificate revocation list (unless an OpenSSl based connector is used and - <strong>certificateRevocationPath</strong> is defined).</p> + <strong>certificateRevocationPath</strong> is defined). Relative paths + will be resolved against <code>$CATALINA_BASE</code>.</p> </attribute> <attribute name="certificateRevocationPath" required="false"> <p>OpenSSL only.</p> <p>Name of the directory that contains the certificate revocation lists - for the certificate authorities. The format is PEM-encoded.</p> + for the certificate authorities. The format is PEM-encoded. Relative paths + will be resolved against <code>$CATALINA_BASE</code>.</p> </attribute> <attribute name="certificateVerification" required="false"> @@ -1186,6 +1197,62 @@ used.</p> </attribute> + <attribute name="trustManagerClassName" required="false"> + <p>JSSE only.</p> + <p>The name of a custom trust manager class to use to validate client + certificates. The class must have a zero argument constructor and must + also implement <code>javax.net.ssl.X509TrustManager</code>. If this + attribute is set, the trust store attributes may be ignored.</p> + </attribute> + + <attribute name="truststoreAlgorithm" required="false"> + <p>JSSE only.</p> + <p>The algorithm to use for truststore. If not specified, the default + value returned by + <code>javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()</code> is + used.</p> + </attribute> + + <attribute name="truststoreFile" required="false"> + <p>JSSE only.</p> + <p>The trust store file to use to validate client certificates. The + default is the value of the <code>javax.net.ssl.trustStore</code> system + property. If neither this attribute nor the default system property is + set, no trust store will be configured. Relative paths + will be resolved against <code>$CATALINA_BASE</code>.</p> + </attribute> + + <attribute name="truststorePass" required="false"> + <p>JSSE only.</p> + <p>The password to access the trust store. The default is the value of the + <code>javax.net.ssl.trustStorePassword</code> system property. If that + property is null, no trust store password will be configured. If an + invalid trust store password is specified, a warning will be logged and an + attempt will be made to access the trust store without a password which + will skip validation of the trust store contents.</p> + </attribute> + + <attribute name="truststoreProvider" required="false"> + <p>JSSE only.</p> + <p>The name of the truststore provider to be used for the server + certificate. The default is the value of the + <code>javax.net.ssl.trustStoreProvider</code> system property. If + that property is null, the value of <code>keystoreProvider</code> is used + as the default. If neither this attribute, the default system property nor + <code>keystoreProvider</code>is set, the list of registered providers is + traversed in preference order and the first provider that supports the + <code>truststoreType</code> is used. + </p> + </attribute> + + <attribute name="truststoreType" required="false"> + <p>JSSE only.</p> + <p>The type of key store used for the trust store. The default is the + value of the <code>javax.net.ssl.trustStoreType</code> system property. If + that property is null, the value of <code>keystoreType</code> is used as + the default.</p> + </attribute> + </attributes> </subsection> @@ -1293,11 +1360,9 @@ </attribute> <attribute name="trustManagerClassName" required="false"> - <p>The name of a custom trust manager class to use to validate client - certificates. The class must have a zero argument constructor and must - also implement <code>javax.net.ssl.X509TrustManager</code>. If this - attribute is set, the trust store attributes may be ignored. - </p> + <p>This is an alias for the <code>trustManagerClassName</code> attribute + of the default <a href="#SSL_Support_-_SSLHostConfig">SSLHostConfig</a> + element.</p> </attribute> <attribute name="trustMaxCertLength" required="false"> @@ -1307,45 +1372,33 @@ </attribute> <attribute name="truststoreAlgorithm" required="false"> - <p>The algorithm to use for truststore. If not specified, the default - value returned by - <code>javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()</code> is - used.</p> + <p>This is an alias for the <code>truststoreAlgorithm</code> attribute of + the default <a href="#SSL_Support_-_SSLHostConfig">SSLHostConfig</a> + element.</p> </attribute> <attribute name="truststoreFile" required="false"> - <p>The trust store file to use to validate client certificates. The - default is the value of the <code>javax.net.ssl.trustStore</code> system - property. If neither this attribute nor the default system property is - set, no trust store will be configured.</p> + <p>This is an alias for the <code>truststoreFile</code> attribute of + the default <a href="#SSL_Support_-_SSLHostConfig">SSLHostConfig</a> + element.</p> </attribute> <attribute name="truststorePass" required="false"> - <p>The password to access the trust store. The default is the value of the - <code>javax.net.ssl.trustStorePassword</code> system property. If that - property is null, no trust store password will be configured. If an - invalid trust store password is specified, a warning will be logged and an - attempt will be made to access the trust store without a password which - will skip validation of the trust store contents.</p> + <p>This is an alias for the <code>truststorePass</code> attribute of + the default <a href="#SSL_Support_-_SSLHostConfig">SSLHostConfig</a> + element.</p> </attribute> <attribute name="truststoreProvider" required="false"> - <p>The name of the truststore provider to be used for the server - certificate. The default is the value of the - <code>javax.net.ssl.trustStoreProvider</code> system property. If - that property is null, the value of <code>keystoreProvider</code> is used - as the default. If neither this attribute, the default system property nor - <code>keystoreProvider</code>is set, the list of registered providers is - traversed in preference order and the first provider that supports the - <code>truststoreType</code> is used. - </p> + <p>This is an alias for the <code>truststoreProvider</code> attribute of + the default <a href="#SSL_Support_-_SSLHostConfig">SSLHostConfig</a> + element.</p> </attribute> <attribute name="truststoreType" required="false"> - <p>The type of key store used for the trust store. The default is the - value of the <code>javax.net.ssl.trustStoreType</code> system property. If - that property is null, the value of <code>keystoreType</code> is used as - the default.</p> + <p>This is an alias for the <code>truststoreType</code> attribute of + the default <a href="#SSL_Support_-_SSLHostConfig">SSLHostConfig</a> + element.</p> </attribute> <attribute name="useServerCipherSuitesOrder" required="false"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org