Index: .classpath =================================================================== --- .classpath (revision 0) +++ .classpath (revision 294) @@ -0,0 +1,10 @@ + + + + + + + + + + Property changes on: .classpath ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: .project =================================================================== --- .project (revision 0) +++ .project (revision 294) @@ -0,0 +1,17 @@ + + + tomcatjss + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + Property changes on: .project ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: src/org/apache/tomcat/util/net/jss/IJSSFactory.java =================================================================== --- src/org/apache/tomcat/util/net/jss/IJSSFactory.java (revision 292) +++ src/org/apache/tomcat/util/net/jss/IJSSFactory.java (revision 294) @@ -19,11 +19,14 @@ package org.apache.tomcat.util.net.jss; -import org.mozilla.jss.ssl.*; -import org.apache.tomcat.util.net.*; -import java.net.*; +import java.net.Socket; +import org.apache.tomcat.util.net.AbstractEndpoint; +import org.apache.tomcat.util.net.SSLSupport; +import org.apache.tomcat.util.net.ServerSocketFactory; + interface IJSSFactory { public ServerSocketFactory getSocketFactory(AbstractEndpoint endpoint); + public SSLSupport getSSLSupport(Socket socket); } Index: src/org/apache/tomcat/util/net/jss/JSSSocketFactory.java =================================================================== --- src/org/apache/tomcat/util/net/jss/JSSSocketFactory.java (revision 292) +++ src/org/apache/tomcat/util/net/jss/JSSSocketFactory.java (revision 294) @@ -19,364 +19,489 @@ package org.apache.tomcat.util.net.jss; -import java.util.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; import java.text.SimpleDateFormat; -import java.lang.Thread; -import java.lang.NumberFormatException; -import org.mozilla.jss.ssl.*; -import org.mozilla.jss.crypto.*; -import org.mozilla.jss.CryptoManager; -import org.mozilla.jss.util.*; -import org.mozilla.jss.pkcs11.*; -import java.net.*; -import java.io.*; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.StringTokenizer; -// Imports required to "implement" Tomcat 7 Interface -import org.apache.tomcat.util.net.AbstractEndpoint; import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; -public class JSSSocketFactory - implements org.apache.tomcat.util.net.ServerSocketFactory, - org.apache.tomcat.util.net.SSLUtil { +// Imports required to "implement" Tomcat 7 Interface +import org.apache.tomcat.util.net.AbstractEndpoint; +import org.mozilla.jss.CryptoManager; +import org.mozilla.jss.crypto.AlreadyInitializedException; +import org.mozilla.jss.crypto.CryptoToken; +import org.mozilla.jss.ssl.SSLServerSocket; +import org.mozilla.jss.ssl.SSLSocket; +import org.mozilla.jss.util.Password; - private static HashMap cipherMap = new HashMap(); +public class JSSSocketFactory implements + org.apache.tomcat.util.net.ServerSocketFactory, + org.apache.tomcat.util.net.SSLUtil { + + private static HashMap cipherMap = new HashMap(); static { // SSLv2 - cipherMap.put("SSL2_RC4_128_WITH_MD5", SSLSocket.SSL2_RC4_128_WITH_MD5); - cipherMap.put("SSL2_RC4_128_EXPORT40_WITH_MD5", SSLSocket.SSL2_RC4_128_EXPORT40_WITH_MD5); - cipherMap.put("SSL2_RC2_128_CBC_WITH_MD5", SSLSocket.SSL2_RC2_128_CBC_WITH_MD5); - cipherMap.put("SSL2_RC2_128_CBC_EXPORT40_WITH_MD5", SSLSocket.SSL2_RC2_128_CBC_EXPORT40_WITH_MD5); - cipherMap.put("SSL2_IDEA_128_CBC_WITH_MD5", SSLSocket.SSL2_IDEA_128_CBC_WITH_MD5); - cipherMap.put("SSL2_DES_64_CBC_WITH_MD5", SSLSocket.SSL2_DES_64_CBC_WITH_MD5); - cipherMap.put("SSL2_DES_192_EDE3_CBC_WITH_MD5", SSLSocket.SSL2_DES_192_EDE3_CBC_WITH_MD5); + cipherMap.put("SSL2_RC4_128_WITH_MD5", SSLSocket.SSL2_RC4_128_WITH_MD5); + cipherMap.put("SSL2_RC4_128_EXPORT40_WITH_MD5", + SSLSocket.SSL2_RC4_128_EXPORT40_WITH_MD5); + cipherMap.put("SSL2_RC2_128_CBC_WITH_MD5", + SSLSocket.SSL2_RC2_128_CBC_WITH_MD5); + cipherMap.put("SSL2_RC2_128_CBC_EXPORT40_WITH_MD5", + SSLSocket.SSL2_RC2_128_CBC_EXPORT40_WITH_MD5); + cipherMap.put("SSL2_IDEA_128_CBC_WITH_MD5", + SSLSocket.SSL2_IDEA_128_CBC_WITH_MD5); + cipherMap.put("SSL2_DES_64_CBC_WITH_MD5", + SSLSocket.SSL2_DES_64_CBC_WITH_MD5); + cipherMap.put("SSL2_DES_192_EDE3_CBC_WITH_MD5", + SSLSocket.SSL2_DES_192_EDE3_CBC_WITH_MD5); // SSLv3 - cipherMap.put("SSL3_RSA_WITH_NULL_MD5", SSLSocket.SSL3_RSA_WITH_NULL_MD5); - cipherMap.put("SSL3_RSA_WITH_NULL_SHA", SSLSocket.SSL3_RSA_WITH_NULL_SHA); - cipherMap.put("SSL3_RSA_EXPORT_WITH_RC4_40_MD5", SSLSocket.SSL3_RSA_EXPORT_WITH_RC4_40_MD5); - cipherMap.put("SSL3_RSA_WITH_RC4_128_MD5", SSLSocket.SSL3_RSA_WITH_RC4_128_MD5); - cipherMap.put("SSL3_RSA_WITH_RC4_128_SHA", SSLSocket.SSL3_RSA_WITH_RC4_128_SHA); - cipherMap.put("SSL3_RSA_EXPORT_WITH_RC2_CBC_40_MD5", SSLSocket.SSL3_RSA_EXPORT_WITH_RC2_CBC_40_MD5); - cipherMap.put("SSL3_RSA_WITH_IDEA_CBC_SHA", SSLSocket.SSL3_RSA_WITH_IDEA_CBC_SHA); - cipherMap.put("SSL3_RSA_EXPORT_WITH_DES40_CBC_SHA", SSLSocket.SSL3_RSA_EXPORT_WITH_DES40_CBC_SHA); - cipherMap.put("SSL3_RSA_WITH_DES_CBC_SHA", SSLSocket.SSL3_RSA_WITH_DES_CBC_SHA); - cipherMap.put("SSL3_RSA_WITH_3DES_EDE_CBC_SHA", SSLSocket.SSL3_RSA_WITH_3DES_EDE_CBC_SHA); - - cipherMap.put("SSL3_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", SSLSocket.SSL3_DH_DSS_EXPORT_WITH_DES40_CBC_SHA); - cipherMap.put("SSL3_DH_DSS_WITH_DES_CBC_SHA", SSLSocket.SSL3_DH_DSS_WITH_DES_CBC_SHA); - cipherMap.put("SSL3_DH_DSS_WITH_3DES_EDE_CBC_SHA", SSLSocket.SSL3_DH_DSS_WITH_3DES_EDE_CBC_SHA); - cipherMap.put("SSL3_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", SSLSocket.SSL3_DH_RSA_EXPORT_WITH_DES40_CBC_SHA); - cipherMap.put("SSL3_DH_RSA_WITH_DES_CBC_SHA", SSLSocket.SSL3_DH_RSA_WITH_DES_CBC_SHA); - cipherMap.put("SSL3_DH_RSA_WITH_3DES_EDE_CBC_SHA", SSLSocket.SSL3_DH_RSA_WITH_3DES_EDE_CBC_SHA); - - cipherMap.put("SSL3_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", SSLSocket.SSL3_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA); - cipherMap.put("SSL3_DHE_DSS_WITH_DES_CBC_SHA", SSLSocket.SSL3_DHE_DSS_WITH_DES_CBC_SHA); - cipherMap.put("SSL3_DHE_DSS_WITH_3DES_EDE_CBC_SHA", SSLSocket.SSL3_DHE_DSS_WITH_3DES_EDE_CBC_SHA); - cipherMap.put("SSL3_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", SSLSocket.SSL3_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA); - cipherMap.put("SSL3_DHE_RSA_WITH_DES_CBC_SHA", SSLSocket.SSL3_DHE_RSA_WITH_DES_CBC_SHA); - cipherMap.put("SSL3_DHE_RSA_WITH_3DES_EDE_CBC_SHA", SSLSocket.SSL3_DHE_RSA_WITH_3DES_EDE_CBC_SHA); - - cipherMap.put("SSL3_DH_ANON_EXPORT_WITH_RC4_40_MD5", SSLSocket.SSL3_DH_ANON_EXPORT_WITH_RC4_40_MD5); - cipherMap.put("SSL3_DH_ANON_WITH_RC4_128_MD5", SSLSocket.SSL3_DH_ANON_WITH_RC4_128_MD5); - cipherMap.put("SSL3_DH_ANON_EXPORT_WITH_DES40_CBC_SHA", SSLSocket.SSL3_DH_ANON_EXPORT_WITH_DES40_CBC_SHA); - cipherMap.put("SSL3_DH_ANON_WITH_DES_CBC_SHA", SSLSocket.SSL3_DH_ANON_WITH_DES_CBC_SHA); - cipherMap.put("SSL3_DH_ANON_WITH_3DES_EDE_CBC_SHA", SSLSocket.SSL3_DH_ANON_WITH_3DES_EDE_CBC_SHA); - - cipherMap.put("SSL3_FORTEZZA_DMS_WITH_NULL_SHA", SSLSocket.SSL3_FORTEZZA_DMS_WITH_NULL_SHA); - cipherMap.put("SSL3_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA", SSLSocket.SSL3_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA); - cipherMap.put("SSL3_FORTEZZA_DMS_WITH_RC4_128_SHA", SSLSocket.SSL3_FORTEZZA_DMS_WITH_RC4_128_SHA); - - cipherMap.put("SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", SSLSocket.SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA); - cipherMap.put("SSL_RSA_FIPS_WITH_DES_CBC_SHA", SSLSocket.SSL_RSA_FIPS_WITH_DES_CBC_SHA); - + cipherMap.put("SSL3_RSA_WITH_NULL_MD5", + SSLSocket.SSL3_RSA_WITH_NULL_MD5); + cipherMap.put("SSL3_RSA_WITH_NULL_SHA", + SSLSocket.SSL3_RSA_WITH_NULL_SHA); + cipherMap.put("SSL3_RSA_EXPORT_WITH_RC4_40_MD5", + SSLSocket.SSL3_RSA_EXPORT_WITH_RC4_40_MD5); + cipherMap.put("SSL3_RSA_WITH_RC4_128_MD5", + SSLSocket.SSL3_RSA_WITH_RC4_128_MD5); + cipherMap.put("SSL3_RSA_WITH_RC4_128_SHA", + SSLSocket.SSL3_RSA_WITH_RC4_128_SHA); + cipherMap.put("SSL3_RSA_EXPORT_WITH_RC2_CBC_40_MD5", + SSLSocket.SSL3_RSA_EXPORT_WITH_RC2_CBC_40_MD5); + cipherMap.put("SSL3_RSA_WITH_IDEA_CBC_SHA", + SSLSocket.SSL3_RSA_WITH_IDEA_CBC_SHA); + cipherMap.put("SSL3_RSA_EXPORT_WITH_DES40_CBC_SHA", + SSLSocket.SSL3_RSA_EXPORT_WITH_DES40_CBC_SHA); + cipherMap.put("SSL3_RSA_WITH_DES_CBC_SHA", + SSLSocket.SSL3_RSA_WITH_DES_CBC_SHA); + cipherMap.put("SSL3_RSA_WITH_3DES_EDE_CBC_SHA", + SSLSocket.SSL3_RSA_WITH_3DES_EDE_CBC_SHA); + + cipherMap.put("SSL3_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", + SSLSocket.SSL3_DH_DSS_EXPORT_WITH_DES40_CBC_SHA); + cipherMap.put("SSL3_DH_DSS_WITH_DES_CBC_SHA", + SSLSocket.SSL3_DH_DSS_WITH_DES_CBC_SHA); + cipherMap.put("SSL3_DH_DSS_WITH_3DES_EDE_CBC_SHA", + SSLSocket.SSL3_DH_DSS_WITH_3DES_EDE_CBC_SHA); + cipherMap.put("SSL3_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", + SSLSocket.SSL3_DH_RSA_EXPORT_WITH_DES40_CBC_SHA); + cipherMap.put("SSL3_DH_RSA_WITH_DES_CBC_SHA", + SSLSocket.SSL3_DH_RSA_WITH_DES_CBC_SHA); + cipherMap.put("SSL3_DH_RSA_WITH_3DES_EDE_CBC_SHA", + SSLSocket.SSL3_DH_RSA_WITH_3DES_EDE_CBC_SHA); + + cipherMap.put("SSL3_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", + SSLSocket.SSL3_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA); + cipherMap.put("SSL3_DHE_DSS_WITH_DES_CBC_SHA", + SSLSocket.SSL3_DHE_DSS_WITH_DES_CBC_SHA); + cipherMap.put("SSL3_DHE_DSS_WITH_3DES_EDE_CBC_SHA", + SSLSocket.SSL3_DHE_DSS_WITH_3DES_EDE_CBC_SHA); + cipherMap.put("SSL3_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", + SSLSocket.SSL3_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA); + cipherMap.put("SSL3_DHE_RSA_WITH_DES_CBC_SHA", + SSLSocket.SSL3_DHE_RSA_WITH_DES_CBC_SHA); + cipherMap.put("SSL3_DHE_RSA_WITH_3DES_EDE_CBC_SHA", + SSLSocket.SSL3_DHE_RSA_WITH_3DES_EDE_CBC_SHA); + + cipherMap.put("SSL3_DH_ANON_EXPORT_WITH_RC4_40_MD5", + SSLSocket.SSL3_DH_ANON_EXPORT_WITH_RC4_40_MD5); + cipherMap.put("SSL3_DH_ANON_WITH_RC4_128_MD5", + SSLSocket.SSL3_DH_ANON_WITH_RC4_128_MD5); + cipherMap.put("SSL3_DH_ANON_EXPORT_WITH_DES40_CBC_SHA", + SSLSocket.SSL3_DH_ANON_EXPORT_WITH_DES40_CBC_SHA); + cipherMap.put("SSL3_DH_ANON_WITH_DES_CBC_SHA", + SSLSocket.SSL3_DH_ANON_WITH_DES_CBC_SHA); + cipherMap.put("SSL3_DH_ANON_WITH_3DES_EDE_CBC_SHA", + SSLSocket.SSL3_DH_ANON_WITH_3DES_EDE_CBC_SHA); + + cipherMap.put("SSL3_FORTEZZA_DMS_WITH_NULL_SHA", + SSLSocket.SSL3_FORTEZZA_DMS_WITH_NULL_SHA); + cipherMap.put("SSL3_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA", + SSLSocket.SSL3_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA); + cipherMap.put("SSL3_FORTEZZA_DMS_WITH_RC4_128_SHA", + SSLSocket.SSL3_FORTEZZA_DMS_WITH_RC4_128_SHA); + + cipherMap.put("SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", + SSLSocket.SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA); + cipherMap.put("SSL_RSA_FIPS_WITH_DES_CBC_SHA", + SSLSocket.SSL_RSA_FIPS_WITH_DES_CBC_SHA); + // TLS - cipherMap.put("TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA", SSLSocket.TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA); - cipherMap.put("TLS_RSA_EXPORT1024_WITH_RC4_56_SHA", SSLSocket.TLS_RSA_EXPORT1024_WITH_RC4_56_SHA); - - cipherMap.put("TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA", SSLSocket.TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA); - cipherMap.put("TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA", SSLSocket.TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA); - cipherMap.put("TLS_DHE_DSS_WITH_RC4_128_SHA", SSLSocket.TLS_DHE_DSS_WITH_RC4_128_SHA); - - cipherMap.put("TLS_RSA_WITH_AES_128_CBC_SHA", SSLSocket.TLS_RSA_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_DH_DSS_WITH_AES_128_CBC_SHA", SSLSocket.TLS_DH_DSS_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_DH_RSA_WITH_AES_128_CBC_SHA", SSLSocket.TLS_DH_RSA_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", SSLSocket.TLS_DHE_DSS_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", SSLSocket.TLS_DHE_RSA_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_DH_ANON_WITH_AES_128_CBC_SHA", SSLSocket.TLS_DH_ANON_WITH_AES_128_CBC_SHA); - - cipherMap.put("TLS_RSA_WITH_AES_256_CBC_SHA", SSLSocket.TLS_RSA_WITH_AES_256_CBC_SHA); - cipherMap.put("TLS_DH_DSS_WITH_AES_256_CBC_SHA", SSLSocket.TLS_DH_DSS_WITH_AES_256_CBC_SHA); - cipherMap.put("TLS_DH_RSA_WITH_AES_256_CBC_SHA", SSLSocket.TLS_DH_RSA_WITH_AES_256_CBC_SHA); - cipherMap.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", SSLSocket.TLS_DHE_DSS_WITH_AES_256_CBC_SHA); - cipherMap.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", SSLSocket.TLS_DHE_RSA_WITH_AES_256_CBC_SHA); - cipherMap.put("TLS_DH_ANON_WITH_AES_256_CBC_SHA", SSLSocket.TLS_DH_ANON_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA", + SSLSocket.TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA); + cipherMap.put("TLS_RSA_EXPORT1024_WITH_RC4_56_SHA", + SSLSocket.TLS_RSA_EXPORT1024_WITH_RC4_56_SHA); + cipherMap.put("TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA", + SSLSocket.TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA); + cipherMap.put("TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA", + SSLSocket.TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA); + cipherMap.put("TLS_DHE_DSS_WITH_RC4_128_SHA", + SSLSocket.TLS_DHE_DSS_WITH_RC4_128_SHA); + + cipherMap.put("TLS_RSA_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_RSA_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_DH_DSS_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_DH_DSS_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_DH_RSA_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_DH_RSA_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_DHE_DSS_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_DHE_RSA_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_DH_ANON_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_DH_ANON_WITH_AES_128_CBC_SHA); + + cipherMap.put("TLS_RSA_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_RSA_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_DH_DSS_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_DH_DSS_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_DH_RSA_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_DH_RSA_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_DHE_DSS_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_DHE_RSA_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_DH_ANON_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_DH_ANON_WITH_AES_256_CBC_SHA); + // ECC - cipherMap.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", SSLSocket.TLS_ECDH_ECDSA_WITH_NULL_SHA); - cipherMap.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", SSLSocket.TLS_ECDH_ECDSA_WITH_RC4_128_SHA); - cipherMap.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", SSLSocket.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA); - cipherMap.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", SSLSocket.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", SSLSocket.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA); - - cipherMap.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", SSLSocket.TLS_ECDHE_ECDSA_WITH_NULL_SHA); - cipherMap.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", SSLSocket.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA); - cipherMap.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", SSLSocket.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA); - cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", + SSLSocket.TLS_ECDH_ECDSA_WITH_NULL_SHA); + cipherMap.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", + SSLSocket.TLS_ECDH_ECDSA_WITH_RC4_128_SHA); + cipherMap.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", + SSLSocket.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA); + cipherMap.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA); - cipherMap.put("TLS_ECDHE_RSA_WITH_NULL_SHA", SSLSocket.TLS_ECDHE_RSA_WITH_NULL_SHA); - cipherMap.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", SSLSocket.TLS_ECDHE_RSA_WITH_RC4_128_SHA); - cipherMap.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", SSLSocket.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA); - cipherMap.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA); - - cipherMap.put("TLS_ECDH_anon_WITH_NULL_SHA", SSLSocket.TLS_ECDH_anon_WITH_NULL_SHA); - cipherMap.put("TLS_ECDH_anon_WITH_RC4_128_SHA", SSLSocket.TLS_ECDH_anon_WITH_RC4_128_SHA); - cipherMap.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", SSLSocket.TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA); - cipherMap.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", SSLSocket.TLS_ECDH_anon_WITH_AES_128_CBC_SHA); - cipherMap.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", SSLSocket.TLS_ECDH_anon_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", + SSLSocket.TLS_ECDHE_ECDSA_WITH_NULL_SHA); + cipherMap.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + SSLSocket.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA); + cipherMap.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", + SSLSocket.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA); + cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA); - //TLSv1_2 - cipherMap.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", SSLSocket.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256); - cipherMap.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", SSLSocket.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256); - cipherMap.put("TLS_RSA_WITH_NULL_SHA256", SSLSocket.TLS_RSA_WITH_NULL_SHA256); - cipherMap.put("TLS_RSA_WITH_AES_128_CBC_SHA256", SSLSocket.TLS_RSA_WITH_AES_128_CBC_SHA256); - cipherMap.put("TLS_RSA_WITH_AES_256_CBC_SHA256", SSLSocket.TLS_RSA_WITH_AES_256_CBC_SHA256); - cipherMap.put("TLS_RSA_WITH_SEED_CBC_SHA", SSLSocket.TLS_RSA_WITH_SEED_CBC_SHA); - cipherMap.put("TLS_RSA_WITH_AES_128_GCM_SHA256", SSLSocket.TLS_RSA_WITH_AES_128_GCM_SHA256); - cipherMap.put("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", SSLSocket.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256); - cipherMap.put("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", SSLSocket.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256); - cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256); - cipherMap.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256); - cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256); - cipherMap.put("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", SSLSocket.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256); - cipherMap.put("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); - cipherMap.put("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", SSLSocket.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256); + cipherMap.put("TLS_ECDHE_RSA_WITH_NULL_SHA", + SSLSocket.TLS_ECDHE_RSA_WITH_NULL_SHA); + cipherMap.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", + SSLSocket.TLS_ECDHE_RSA_WITH_RC4_128_SHA); + cipherMap.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", + SSLSocket.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA); + cipherMap.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA); + cipherMap.put("TLS_ECDH_anon_WITH_NULL_SHA", + SSLSocket.TLS_ECDH_anon_WITH_NULL_SHA); + cipherMap.put("TLS_ECDH_anon_WITH_RC4_128_SHA", + SSLSocket.TLS_ECDH_anon_WITH_RC4_128_SHA); + cipherMap.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", + SSLSocket.TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA); + cipherMap.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", + SSLSocket.TLS_ECDH_anon_WITH_AES_128_CBC_SHA); + cipherMap.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", + SSLSocket.TLS_ECDH_anon_WITH_AES_256_CBC_SHA); + + // TLSv1_2 + cipherMap.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", + SSLSocket.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256); + cipherMap.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", + SSLSocket.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256); + cipherMap.put("TLS_RSA_WITH_NULL_SHA256", + SSLSocket.TLS_RSA_WITH_NULL_SHA256); + cipherMap.put("TLS_RSA_WITH_AES_128_CBC_SHA256", + SSLSocket.TLS_RSA_WITH_AES_128_CBC_SHA256); + cipherMap.put("TLS_RSA_WITH_AES_256_CBC_SHA256", + SSLSocket.TLS_RSA_WITH_AES_256_CBC_SHA256); + cipherMap.put("TLS_RSA_WITH_SEED_CBC_SHA", + SSLSocket.TLS_RSA_WITH_SEED_CBC_SHA); + cipherMap.put("TLS_RSA_WITH_AES_128_GCM_SHA256", + SSLSocket.TLS_RSA_WITH_AES_128_GCM_SHA256); + cipherMap.put("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", + SSLSocket.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256); + cipherMap.put("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", + SSLSocket.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256); + cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256); + cipherMap.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256); + cipherMap.put("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", + SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256); + cipherMap.put("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", + SSLSocket.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256); + cipherMap.put("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); + cipherMap.put("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", + SSLSocket.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256); + } - private static HashMap eccCipherMap = new HashMap(); + private static HashMap eccCipherMap = new HashMap(); static { - eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS_ECDHE_RSA_WITH_RC4_128_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_RC4_128_SHA, "TLS_ECDH_RSA_WITH_RC4_128_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_RC4_128_SHA, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_NULL_SHA, "TLS_ECDHE_ECDSA_WITH_NULL_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_NULL_SHA, "TLS_ECDHE_RSA_WITH_NULL_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_NULL_SHA, "TLS_ECDH_RSA_WITH_NULL_SHA"); - eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_NULL_SHA, "TLS_ECDH_ECDSA_WITH_NULL_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, + "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, + "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_RC4_128_SHA, + "TLS_ECDHE_RSA_WITH_RC4_128_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_RC4_128_SHA, + "TLS_ECDH_RSA_WITH_RC4_128_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_RC4_128_SHA, + "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, + "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, + "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, + "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, + "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_ECDSA_WITH_NULL_SHA, + "TLS_ECDHE_ECDSA_WITH_NULL_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDHE_RSA_WITH_NULL_SHA, + "TLS_ECDHE_RSA_WITH_NULL_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_RSA_WITH_NULL_SHA, + "TLS_ECDH_RSA_WITH_NULL_SHA"); + eccCipherMap.put(SSLSocket.TLS_ECDH_ECDSA_WITH_NULL_SHA, + "TLS_ECDH_ECDSA_WITH_NULL_SHA"); } private AbstractEndpoint endpoint; - static org.apache.commons.logging.Log log = - org.apache.commons.logging.LogFactory.getLog(JSSSocketFactory.class); + static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory + .getLog(JSSSocketFactory.class); protected static boolean ocspConfigured = false; protected boolean requireClientAuth = false; protected boolean wantClientAuth = false; - private Vector enabledCiphers = new Vector(); private boolean initialized = false; private String serverCertNick = ""; - private String mServerCertNickPath =""; - private String mPwdPath =""; - private String mPwdClass =""; + private String mServerCertNickPath = ""; + private String mPwdPath = ""; + private String mPwdClass = ""; private static final String DATE_PATTERN = "dd/MMM/yyyy:HH:mm:ss"; - private static SimpleDateFormat timeStampFormat = new SimpleDateFormat(DATE_PATTERN); + private static SimpleDateFormat timeStampFormat = new SimpleDateFormat( + DATE_PATTERN); FileWriter debugFile = null; boolean debug = false; private IPasswordStore mPasswordStore = null; private boolean mStrictCiphers = false; - public JSSSocketFactory (AbstractEndpoint endpoint) { + public JSSSocketFactory(AbstractEndpoint endpoint) { this.endpoint = endpoint; } private void debugWrite(String m) throws IOException { - if (debug) { + if (debug) { String timeStamp = timeStampFormat.format(new Date()); String threadName = Thread.currentThread().getName(); - debugFile.write("[" + timeStamp + "][" + threadName + "]: " + m); + debugFile.write("[" + timeStamp + "][" + threadName + "]: " + m); } } - public void setSSLCiphers(String attr) throws SocketException, IOException - { - String ciphers = (String)endpoint.getAttribute(attr); - if (ciphers == null || ciphers.equals("")) { - debugWrite("JSSSocketFactory setSSLCiphers: "+ attr +" not found"); - return; - } - StringTokenizer st = new StringTokenizer(ciphers, ","); - while (st.hasMoreTokens()) { - String cipherstr = st.nextToken(); - int cipherid = 0; - String text; - boolean state; - - if (cipherstr.startsWith("+")) { - state = true; - text = cipherstr.substring(1); - } else if (cipherstr.startsWith("-")) { - state = false; - text = cipherstr.substring(1); - } else { - state = true; // no enable/disable flag, assume enable - text = cipherstr; + public void setSSLCiphers(String attr) throws SocketException, IOException { + String ciphers = (String) endpoint.getAttribute(attr); + if (ciphers == null || ciphers.equals("")) { + debugWrite("JSSSocketFactory setSSLCiphers: " + attr + " not found"); + return; } + StringTokenizer st = new StringTokenizer(ciphers, ","); + while (st.hasMoreTokens()) { + String cipherstr = st.nextToken(); + int cipherid = 0; + String text; + boolean state; - if (text.startsWith("0x") || text.startsWith("0X")) { - // this allows us to specify new ciphers - try { - cipherid = Integer.parseInt(text.substring(2), 16); + if (cipherstr.startsWith("+")) { + state = true; + text = cipherstr.substring(1); + } else if (cipherstr.startsWith("-")) { + state = false; + text = cipherstr.substring(1); + } else { + state = true; // no enable/disable flag, assume enable + text = cipherstr; } - catch (Exception e) { - System.err.println("Error: SSL cipher \"\""+text+"\" cannot be read as an integer"); - continue; - } - } else { - Object mapValue; - mapValue = cipherMap.get(text); - if (mapValue == null) { - cipherid = 0; + if (text.startsWith("0x") || text.startsWith("0X")) { + // this allows us to specify new ciphers + try { + cipherid = Integer.parseInt(text.substring(2), 16); + } catch (Exception e) { + System.err.println("Error: SSL cipher \"\"" + text + + "\" cannot be read as an integer"); + continue; + } } else { - cipherid = (Integer)mapValue; - } - } - if (cipherid != 0) { - try { - debugWrite("JSSSocketFactory setSSLCiphers: "+ - cipherstr+": 0x"+Integer.toHexString(cipherid) +"\n"); - SSLSocket.setCipherPreferenceDefault(cipherid, state); - } - catch (Exception e) { - if (eccCipherMap.containsKey(cipherid)) { - System.err.println("Warning: SSL ECC cipher \""+text+"\" unsupported by NSS. "+ - "This is probably O.K. unless ECC support has been installed."); + Object mapValue; + + mapValue = cipherMap.get(text); + if (mapValue == null) { + cipherid = 0; } else { - System.err.println("Error: SSL cipher \""+text+"\" unsupported by NSS"); + cipherid = (Integer) mapValue; } } - } else { - System.err.println("Error: SSL cipher \""+text+"\" not recognized by tomcatjss"); + if (cipherid != 0) { + try { + debugWrite("JSSSocketFactory setSSLCiphers: " + cipherstr + + ": 0x" + Integer.toHexString(cipherid) + "\n"); + SSLSocket.setCipherPreferenceDefault(cipherid, state); + } catch (Exception e) { + if (eccCipherMap.containsKey(cipherid)) { + System.err + .println("Warning: SSL ECC cipher \"" + + text + + "\" unsupported by NSS. " + + "This is probably O.K. unless ECC support has been installed."); + } else { + System.err.println("Error: SSL cipher \"" + text + + "\" unsupported by NSS"); + } + } + } else { + System.err.println("Error: SSL cipher \"" + text + + "\" not recognized by tomcatjss"); + } } - } } /* - * note: the SSL_OptionSet-based API for controlling the enabled - * protocol versions are obsolete and replaced by the - * setSSLVersionRange calls. If the "range" parameters are - * present in the attributes then the sslOptions parameter is - * ignored. + * note: the SSL_OptionSet-based API for controlling the enabled protocol + * versions are obsolete and replaced by the setSSLVersionRange calls. If + * the "range" parameters are present in the attributes then the sslOptions + * parameter is ignored. */ - public void setSSLOptions() throws SocketException, IOException - { - String options = (String)endpoint.getAttribute("sslOptions"); - StringTokenizer st = new StringTokenizer(options, ","); - while (st.hasMoreTokens()) { - String option = st.nextToken(); - StringTokenizer st1 = new StringTokenizer(option, "="); - String name = st1.nextToken(); - String value = st1.nextToken(); - if (name.equals("ssl2")) { - if (value.equals("true")) { - SSLSocket.enableSSL2Default(true); - setSSLCiphers("ssl2Ciphers"); - } else { - SSLSocket.enableSSL2Default(false); - } + public void setSSLOptions() throws SocketException, IOException { + String options = (String) endpoint.getAttribute("sslOptions"); + StringTokenizer st = new StringTokenizer(options, ","); + while (st.hasMoreTokens()) { + String option = st.nextToken(); + StringTokenizer st1 = new StringTokenizer(option, "="); + String name = st1.nextToken(); + String value = st1.nextToken(); + if (name.equals("ssl2")) { + if (value.equals("true")) { + SSLSocket.enableSSL2Default(true); + setSSLCiphers("ssl2Ciphers"); + } else { + SSLSocket.enableSSL2Default(false); + } + } + if (name.equals("ssl3")) { + if (value.equals("true")) { + SSLSocket.enableSSL3Default(true); + setSSLCiphers("ssl3Ciphers"); + } else { + SSLSocket.enableSSL3Default(false); + } + } + if (name.equals("tls")) { + if (value.equals("true")) { + SSLSocket.enableTLSDefault(true); + setSSLCiphers("tlsCiphers"); + } else { + SSLSocket.enableTLSDefault(false); + } + } } - if (name.equals("ssl3")) { - if (value.equals("true")) { - SSLSocket.enableSSL3Default(true); - setSSLCiphers("ssl3Ciphers"); - } else { - SSLSocket.enableSSL3Default(false); - } - } - if (name.equals("tls")) { - if (value.equals("true")) { - SSLSocket.enableTLSDefault(true); - setSSLCiphers("tlsCiphers"); - } else { - SSLSocket.enableTLSDefault(false); - } - } - } } // remove all to start with a clean slate - public void unsetSSLCiphers() throws SocketException - { + public void unsetSSLCiphers() throws SocketException { int ciphers[] = SSLSocket.getImplementedCipherSuites(); try { - for (int i = 0; ciphers != null && i < ciphers.length; i++) { + for (int i = 0; ciphers != null && i < ciphers.length; i++) { - debugWrite("JSSSocketFactory unsetSSLCiphers - turning off '0x"+ - Integer.toHexString(ciphers[i]) + "'\n"); - SSLSocket.setCipherPreferenceDefault(ciphers[i], false); - } + debugWrite("JSSSocketFactory unsetSSLCiphers - turning off '0x" + + Integer.toHexString(ciphers[i]) + "'\n"); + SSLSocket.setCipherPreferenceDefault(ciphers[i], false); + } } catch (Exception e) { } } - /* - * setSSLVersionRangeDefault sets the range of allowed ssl versions. - * This replaces the obsolete SSL_Option* API - * - * @param protoVariant indicates whether this setting is for - type "stream" or "datagram" - * @param sslVersionRange_s takes on the form of "min:max" where - * min/max values can be "ssl3, tls1_0, tls1_1, or tls1_2" - * ssl2 is not supported for tomcatjss via this interface - * The format is "sslVersionRange=min:max" + * setSSLVersionRangeDefault sets the range of allowed ssl versions. This + * replaces the obsolete SSL_Option* API + * + * @param protoVariant indicates whether this setting is for type "stream" + * or "datagram" + * + * @param sslVersionRange_s takes on the form of "min:max" where min/max + * values can be "ssl3, tls1_0, tls1_1, or tls1_2" ssl2 is not supported for + * tomcatjss via this interface The format is "sslVersionRange=min:max" */ public void setSSLVersionRangeDefault( org.mozilla.jss.ssl.SSLSocket.SSLProtocolVariant protoVariant, - String sslVersionRange_s) - throws SocketException, IllegalArgumentException, IOException { + String sslVersionRange_s) throws SocketException, + IllegalArgumentException, IOException { // process sslVersionRange_s - String[] sslVersionRange = sslVersionRange_s.split(":"); + String[] sslVersionRange = sslVersionRange_s.split(":"); if (sslVersionRange.length != 2) { - debugWrite("JSSSocketFactory setSSLversionRangeDefault- SSL Version Range format error: " + sslVersionRange_s +"\n"); - throw new SocketException("tomcatjss: setSSLversionRangeDefault format error"); + debugWrite("JSSSocketFactory setSSLversionRangeDefault- SSL Version Range format error: " + + sslVersionRange_s + "\n"); + throw new SocketException( + "tomcatjss: setSSLversionRangeDefault format error"); } String min_s = sslVersionRange[0]; String max_s = sslVersionRange[1]; int min = getSSLVersionRangeEnum(min_s); int max = getSSLVersionRangeEnum(max_s); - if ((min == -1) || (max== -1)) { - debugWrite("JSSSocketFactory setSSLversionRangeDefault- SSL Version Range format error: " + sslVersionRange_s +"\n"); - throw new SocketException("tomcatjss: setSSLversionRangeDefault format error"); + if ((min == -1) || (max == -1)) { + debugWrite("JSSSocketFactory setSSLversionRangeDefault- SSL Version Range format error: " + + sslVersionRange_s + "\n"); + throw new SocketException( + "tomcatjss: setSSLversionRangeDefault format error"); } - debugWrite("JSSSocketFactory setSSLversionRangeDefault- SSL Version Range set to min=" + min + " max = " + max +"\n"); - org.mozilla.jss.ssl.SSLSocket.SSLVersionRange range = - new org.mozilla.jss.ssl.SSLSocket.SSLVersionRange(min, max); + debugWrite("JSSSocketFactory setSSLversionRangeDefault- SSL Version Range set to min=" + + min + " max = " + max + "\n"); + org.mozilla.jss.ssl.SSLSocket.SSLVersionRange range = new org.mozilla.jss.ssl.SSLSocket.SSLVersionRange( + min, max); SSLSocket.setSSLVersionRangeDefault(protoVariant, range); debugWrite("JSSSocketFactory setSSLversionRangeDefault- variant set\n"); } - int getSSLVersionRangeEnum (String rangeString) { + int getSSLVersionRangeEnum(String rangeString) { if (rangeString == null) return -1; if (rangeString.equals("ssl3")) @@ -393,39 +518,40 @@ void init() throws IOException { try { - String deb = (String)endpoint.getAttribute("debug"); + String deb = (String) endpoint.getAttribute("debug"); if (deb.equals("true")) { - debug = true; - debugFile = new FileWriter("/tmp/tomcatjss.log", true); - debugWrite("JSSSocketFactory init - debug is on\n"); + debug = true; + debugFile = new FileWriter("/tmp/tomcatjss.log", true); + debugWrite("JSSSocketFactory init - debug is on\n"); } } catch (Exception e) { - // System.out.println("no tomcatjss debugging"); + // System.out.println("no tomcatjss debugging"); } try { try { - mPwdPath = (String)endpoint.getAttribute("passwordFile"); - mPwdClass = (String)endpoint.getAttribute("passwordClass"); - if (mPwdClass != null) { - mPasswordStore = (IPasswordStore)Class.forName(mPwdClass).newInstance(); + mPwdPath = (String) endpoint.getAttribute("passwordFile"); + mPwdClass = (String) endpoint.getAttribute("passwordClass"); + if (mPwdClass != null) { + mPasswordStore = (IPasswordStore) Class.forName(mPwdClass) + .newInstance(); mPasswordStore.init(mPwdPath); debugWrite("JSSSocketFactory init - password reader initialized\n"); - } - } catch (Exception e) { + } + } catch (Exception e) { debugWrite("JSSSocketFactory init - Exception caught: " - +e.toString() + "\n"); + + e.toString() + "\n"); if (debugFile != null) debugFile.close(); - throw new IOException("JSSSocketFactory: no passwordFilePath defined"); + throw new IOException( + "JSSSocketFactory: no passwordFilePath defined"); } - String certDir = (String)endpoint.getAttribute("certdbDir"); - - CryptoManager.InitializationValues vals = - new CryptoManager.InitializationValues(certDir, - "", "", "secmod.db"); + String certDir = (String) endpoint.getAttribute("certdbDir"); + CryptoManager.InitializationValues vals = new CryptoManager.InitializationValues( + certDir, "", "", "secmod.db"); + vals.removeSunProvider = false; vals.installJSSProvider = true; try { @@ -435,22 +561,22 @@ } CryptoManager manager = CryptoManager.getInstance(); - //JSSSocketFactory init - handle crypto tokens + // JSSSocketFactory init - handle crypto tokens debugWrite("JSSSocketFactory init - about to handle crypto unit logins\n"); if (mPasswordStore != null) { - Enumeration en = mPasswordStore.getTags(); - while (en.hasMoreElements()){ + Enumeration en = mPasswordStore.getTags(); + while (en.hasMoreElements()) { String pwd = ""; Password pw = null; String tokenName = ""; String st = (String) en.nextElement(); - debugWrite("JSSSocketFactory init - tag name="+st+"\n"); + debugWrite("JSSSocketFactory init - tag name=" + st + "\n"); pwd = mPasswordStore.getPassword(st); if (pwd != null) { debugWrite("JSSSocketFactory init - got password\n"); - pw = new Password(pwd.toCharArray()); + pw = new Password(pwd.toCharArray()); } else { debugWrite("JSSSocketFactory init - no pwd found in password.conf\n"); continue; @@ -464,12 +590,13 @@ debugWrite("JSSSocketFactory init - got hardware\n"); tokenName = st.substring(9); - debugWrite("JSSSocketFactory init - tokenName="+tokenName+"\n"); + debugWrite("JSSSocketFactory init - tokenName=" + + tokenName + "\n"); // find the hsm and log in token = manager.getTokenByName(tokenName); } else { - //non-token entries + // non-token entries } if (token != null) { if (!token.isLoggedIn()) { @@ -479,15 +606,15 @@ debugWrite("JSSSocketFactory init - already logged in\n"); } } - } //while + } // while debugWrite("JSSSocketFactory init - tokens initialized/logged in\n"); } else { debugWrite("JSSSocketFactory init - no login done\n"); - } //mPasswordStore not null + } // mPasswordStore not null // MUST look for "clientauth" (ALL lowercase) since "clientAuth" // (camel case) has already been processed by Tomcat 7 - String clientAuthStr = (String)endpoint.getAttribute("clientauth"); + String clientAuthStr = (String) endpoint.getAttribute("clientauth"); if (clientAuthStr == null) { debugWrite("JSSSocketFactory init - \"clientauth\" not found, default to want."); clientAuthStr = "want"; @@ -494,178 +621,208 @@ } File file = null; try { - mServerCertNickPath = (String)endpoint.getAttribute("serverCertNickFile"); - debugWrite("JSSSocketFactory init - got serverCertNickFile"+ - mServerCertNickPath+"\n"); + mServerCertNickPath = (String) endpoint + .getAttribute("serverCertNickFile"); + debugWrite("JSSSocketFactory init - got serverCertNickFile" + + mServerCertNickPath + "\n"); file = new File(mServerCertNickPath); - Long l = new Long(file.length()); FileInputStream in = new FileInputStream(mServerCertNickPath); - BufferedReader d = - new BufferedReader(new InputStreamReader(in)); + BufferedReader d = new BufferedReader(new InputStreamReader(in)); do { - serverCertNick = d.readLine(); - debugWrite("JSSSocketFactory init - got line "+ - serverCertNick +"\n"); - if (serverCertNick == null) { - in.close(); - d.close(); - throw new IOException("JSSSocketFactory: error loading serverCertNickFile"); - } - // handle comments or blank lines - if (serverCertNick.trim().startsWith("#") || - serverCertNick.trim().equals("")) { - serverCertNick = null; - } + serverCertNick = d.readLine(); + debugWrite("JSSSocketFactory init - got line " + + serverCertNick + "\n"); + if (serverCertNick == null) { + in.close(); + d.close(); + throw new IOException( + "JSSSocketFactory: error loading serverCertNickFile"); + } + // handle comments or blank lines + if (serverCertNick.trim().startsWith("#") + || serverCertNick.trim().equals("")) { + serverCertNick = null; + } } while (serverCertNick == null); - debugWrite("JSSSocketFactory init - found nickname=" + serverCertNick + "\n"); + debugWrite("JSSSocketFactory init - found nickname=" + + serverCertNick + "\n"); in.close(); d.close(); } catch (Exception e) { debugWrite("JSSSocketFactory init - Exception caught: " - +e.toString() + "\n"); + + e.toString() + "\n"); if (debugFile != null) debugFile.close(); - throw new IOException("JSSSocketFactory: no serverCertNickFile defined"); + throw new IOException( + "JSSSocketFactory: no serverCertNickFile defined"); } - //serverCertNick = (String)endpoint.getAttribute("serverCert"); - if (clientAuthStr.equalsIgnoreCase("true") || - clientAuthStr.equalsIgnoreCase("yes")) { + // serverCertNick = (String)endpoint.getAttribute("serverCert"); + if (clientAuthStr.equalsIgnoreCase("true") + || clientAuthStr.equalsIgnoreCase("yes")) { requireClientAuth = true; } else if (clientAuthStr.equalsIgnoreCase("want")) { wantClientAuth = true; } - debugWrite("JSSSocketFActory init - requireClientAuth " + requireClientAuth + - " wantClientAuth " + wantClientAuth + " ocspConfigured " - + ocspConfigured); - if (requireClientAuth == true || wantClientAuth == true - && ocspConfigured == false ) { - debugWrite("JSSSocketFactory init - checking for OCSP settings. \n" ); - boolean enableOCSP = false; + debugWrite("JSSSocketFActory init - requireClientAuth " + + requireClientAuth + " wantClientAuth " + wantClientAuth + + " ocspConfigured " + ocspConfigured); + if (requireClientAuth == true || wantClientAuth == true + && ocspConfigured == false) { + debugWrite("JSSSocketFactory init - checking for OCSP settings. \n"); + boolean enableOCSP = false; String doOCSP = (String) endpoint.getAttribute("enableOCSP"); - debugWrite("JSSSocketFactory init - doOCSP flag:"+ - doOCSP+ " \n"); + debugWrite("JSSSocketFactory init - doOCSP flag:" + doOCSP + + " \n"); - if (doOCSP != null && doOCSP.equalsIgnoreCase("true")) { - enableOCSP = true; - } - - debugWrite("JSSSocketFactory init - enableOCSP "+ - enableOCSP+ "\n"); - - if( enableOCSP == true ) { - String ocspResponderURL = (String) endpoint.getAttribute("ocspResponderURL"); - debugWrite("JSSSocketFactory init - ocspResponderURL "+ - ocspResponderURL+ "\n"); - String ocspResponderCertNickname = (String) endpoint.getAttribute("ocspResponderCertNickname"); - debugWrite("JSSSocketFactory init - ocspResponderCertNickname" + ocspResponderCertNickname + "\n"); - if( (ocspResponderURL != null && ocspResponderURL.length() > 0) && - (ocspResponderCertNickname != null && - ocspResponderCertNickname.length() > 0 )) { + if (doOCSP != null && doOCSP.equalsIgnoreCase("true")) { + enableOCSP = true; + } - ocspConfigured = true; - try { - manager.configureOCSP(true,ocspResponderURL,ocspResponderCertNickname); - int ocspCacheSize_i = 1000; - int ocspMinCacheEntryDuration_i = 3600; - int ocspMaxCacheEntryDuration_i = 86400; + debugWrite("JSSSocketFactory init - enableOCSP " + enableOCSP + + "\n"); - String ocspCacheSize = (String) endpoint.getAttribute("ocspCacheSize"); - String ocspMinCacheEntryDuration = (String) endpoint.getAttribute("ocspMinCacheEntryDuration"); - String ocspMaxCacheEntryDuration = (String) endpoint.getAttribute("ocspMaxCacheEntryDuration"); + if (enableOCSP == true) { + String ocspResponderURL = (String) endpoint + .getAttribute("ocspResponderURL"); + debugWrite("JSSSocketFactory init - ocspResponderURL " + + ocspResponderURL + "\n"); + String ocspResponderCertNickname = (String) endpoint + .getAttribute("ocspResponderCertNickname"); + debugWrite("JSSSocketFactory init - ocspResponderCertNickname" + + ocspResponderCertNickname + "\n"); + if ((ocspResponderURL != null && ocspResponderURL.length() > 0) + && (ocspResponderCertNickname != null && ocspResponderCertNickname + .length() > 0)) { - if (ocspCacheSize != null || - ocspMinCacheEntryDuration != null || - ocspMaxCacheEntryDuration != null) { - // not specified then takes the default - if (ocspCacheSize != null) { - debugWrite("JSSSocketFactory init - ocspCacheSize= " + ocspCacheSize+"\n"); - ocspCacheSize_i = Integer.parseInt(ocspCacheSize); - } - if (ocspMinCacheEntryDuration != null) { - debugWrite("JSSSocketFactory init - ocspMinCacheEntryDuration= " + ocspMinCacheEntryDuration+"\n"); - ocspMinCacheEntryDuration_i = Integer.parseInt(ocspMinCacheEntryDuration); - } - if (ocspMaxCacheEntryDuration != null) { - debugWrite("JSSSocketFactory init - ocspMaxCacheEntryDuration= " + ocspMaxCacheEntryDuration+"\n"); - ocspMaxCacheEntryDuration_i = Integer.parseInt(ocspMaxCacheEntryDuration); - } - manager.OCSPCacheSettings(ocspCacheSize_i, - ocspMinCacheEntryDuration_i, ocspMaxCacheEntryDuration_i); - } + ocspConfigured = true; + try { + manager.configureOCSP(true, ocspResponderURL, + ocspResponderCertNickname); + int ocspCacheSize_i = 1000; + int ocspMinCacheEntryDuration_i = 3600; + int ocspMaxCacheEntryDuration_i = 86400; - // defualt to 60 seconds; - String ocspTimeout = (String) endpoint.getAttribute("ocspTimeout"); - if (ocspTimeout != null) { - debugWrite("JSSSocketFactory init - ocspTimeout= \n" + ocspTimeout); - int ocspTimeout_i = Integer.parseInt(ocspTimeout); - if (ocspTimeout_i < 0) - ocspTimeout_i = 60; - manager.setOCSPTimeout(ocspTimeout_i); - } + String ocspCacheSize = (String) endpoint + .getAttribute("ocspCacheSize"); + String ocspMinCacheEntryDuration = (String) endpoint + .getAttribute("ocspMinCacheEntryDuration"); + String ocspMaxCacheEntryDuration = (String) endpoint + .getAttribute("ocspMaxCacheEntryDuration"); - } catch(java.security.GeneralSecurityException e) { - ocspConfigured = false; - debugWrite("JSSSocketFactory init - error initializing OCSP e: " + e.toString()+"\n"); - throw new java.security.GeneralSecurityException("Error setting up OCSP. Check configuraion!"); - } catch (java.lang.NumberFormatException e) { - debugWrite("JSSSocketFactory init - error setting OCSP cache e: " + e.toString()+"\n"); - throw new java.lang.NumberFormatException("Error setting OCSP cache. Check configuraion!"); - } - } else { + if (ocspCacheSize != null + || ocspMinCacheEntryDuration != null + || ocspMaxCacheEntryDuration != null) { + // not specified then takes the default + if (ocspCacheSize != null) { + debugWrite("JSSSocketFactory init - ocspCacheSize= " + + ocspCacheSize + "\n"); + ocspCacheSize_i = Integer + .parseInt(ocspCacheSize); + } + if (ocspMinCacheEntryDuration != null) { + debugWrite("JSSSocketFactory init - ocspMinCacheEntryDuration= " + + ocspMinCacheEntryDuration + "\n"); + ocspMinCacheEntryDuration_i = Integer + .parseInt(ocspMinCacheEntryDuration); + } + if (ocspMaxCacheEntryDuration != null) { + debugWrite("JSSSocketFactory init - ocspMaxCacheEntryDuration= " + + ocspMaxCacheEntryDuration + "\n"); + ocspMaxCacheEntryDuration_i = Integer + .parseInt(ocspMaxCacheEntryDuration); + } + manager.OCSPCacheSettings(ocspCacheSize_i, + ocspMinCacheEntryDuration_i, + ocspMaxCacheEntryDuration_i); + } + + // defualt to 60 seconds; + String ocspTimeout = (String) endpoint + .getAttribute("ocspTimeout"); + if (ocspTimeout != null) { + debugWrite("JSSSocketFactory init - ocspTimeout= \n" + + ocspTimeout); + int ocspTimeout_i = Integer + .parseInt(ocspTimeout); + if (ocspTimeout_i < 0) + ocspTimeout_i = 60; + manager.setOCSPTimeout(ocspTimeout_i); + } + + } catch (java.security.GeneralSecurityException e) { + ocspConfigured = false; + debugWrite("JSSSocketFactory init - error initializing OCSP e: " + + e.toString() + "\n"); + throw new java.security.GeneralSecurityException( + "Error setting up OCSP. Check configuraion!"); + } catch (java.lang.NumberFormatException e) { + debugWrite("JSSSocketFactory init - error setting OCSP cache e: " + + e.toString() + "\n"); + throw new java.lang.NumberFormatException( + "Error setting OCSP cache. Check configuraion!"); + } + } else { debugWrite("JSSSocketFactory init - error ocsp misconfigured! \n"); - throw new java.security.GeneralSecurityException("Error setting up OCSP. Check configuration!"); - } + throw new java.security.GeneralSecurityException( + "Error setting up OCSP. Check configuration!"); + } } } - //serverCertNick = "Server-Cert cert-tks"; + // serverCertNick = "Server-Cert cert-tks"; // 12 hours = 43200 seconds SSLServerSocket.configServerSessionIDCache(0, 43200, 43200, null); - String strictCiphersStr = (String)endpoint.getAttribute("strictCiphers"); - if (strictCiphersStr.equalsIgnoreCase("true") || - strictCiphersStr.equalsIgnoreCase("yes")) { + String strictCiphersStr = (String) endpoint + .getAttribute("strictCiphers"); + if (strictCiphersStr.equalsIgnoreCase("true") + || strictCiphersStr.equalsIgnoreCase("yes")) { mStrictCiphers = true; } if (mStrictCiphers == true) { // what ciphers do we have to start with? turn them all off - debugWrite("SSSocketFactory init - before setSSLCiphers, strictCiphers is true\n"); - unsetSSLCiphers(); + debugWrite("SSSocketFactory init - before setSSLCiphers, strictCiphers is true\n"); + unsetSSLCiphers(); } else { - debugWrite("SSSocketFactory init - before setSSLCiphers, strictCiphers is false\n"); + debugWrite("SSSocketFactory init - before setSSLCiphers, strictCiphers is false\n"); } - String sslVersionRangeStream = (String)endpoint.getAttribute("sslVersionRangeStream"); - if ((sslVersionRangeStream != null) && !sslVersionRangeStream.equals("")) { + String sslVersionRangeStream = (String) endpoint + .getAttribute("sslVersionRangeStream"); + if ((sslVersionRangeStream != null) + && !sslVersionRangeStream.equals("")) { debugWrite("SSSocketFactory init - calling setSSLVersionRangeDefault() for type STREAM\n"); - setSSLVersionRangeDefault(org.mozilla.jss.ssl.SSLSocket.SSLProtocolVariant.STREAM, sslVersionRangeStream); + setSSLVersionRangeDefault( + org.mozilla.jss.ssl.SSLSocket.SSLProtocolVariant.STREAM, + sslVersionRangeStream); debugWrite("SSSocketFactory init - after setSSLVersionRangeDefault() for type STREAM\n"); } - String sslVersionRangeDatagram = (String)endpoint.getAttribute("sslVersionRangeDatagram"); - if ((sslVersionRangeDatagram != null) && !sslVersionRangeDatagram.equals("")) { + String sslVersionRangeDatagram = (String) endpoint + .getAttribute("sslVersionRangeDatagram"); + if ((sslVersionRangeDatagram != null) + && !sslVersionRangeDatagram.equals("")) { debugWrite("SSSocketFactory init - calling setSSLVersionRangeDefault() for type DATA_GRAM\n"); - setSSLVersionRangeDefault(org.mozilla.jss.ssl.SSLSocket.SSLProtocolVariant.DATA_GRAM, sslVersionRangeDatagram); + setSSLVersionRangeDefault( + org.mozilla.jss.ssl.SSLSocket.SSLProtocolVariant.DATA_GRAM, + sslVersionRangeDatagram); debugWrite("SSSocketFactory init - after setSSLVersionRangeDefault() for type DATA_GRAM\n"); } /* - * According to NSS: - * the SSL_OptionSet-based API for controlling the enabled - * protocol versions are obsolete and replaced by the - * setSSLVersionRange calls. - * Therefore, if the "range" parameters are - * present in the attributes then the sslOptions parameter is - * ignored. - * Using the new version range API in conjunction with the older - * SSL_OptionSet-based API for controlling the enabled protocol - * versions may cause unexpected results + * According to NSS: the SSL_OptionSet-based API for controlling the + * enabled protocol versions are obsolete and replaced by the + * setSSLVersionRange calls. Therefore, if the "range" parameters + * are present in the attributes then the sslOptions parameter is + * ignored. Using the new version range API in conjunction with the + * older SSL_OptionSet-based API for controlling the enabled + * protocol versions may cause unexpected results */ - if (((sslVersionRangeStream != null) - && !sslVersionRangeStream.equals("")) - || ((sslVersionRangeDatagram != null) - && !sslVersionRangeDatagram.equals(""))) { + if (((sslVersionRangeStream != null) && !sslVersionRangeStream + .equals("")) + || ((sslVersionRangeDatagram != null) && !sslVersionRangeDatagram + .equals(""))) { /* deliberately lose the ssl2 here */ debugWrite("SSSocketFactory init - calling setSSLCiphers() honoring only sslRangeCiphers\n"); setSSLCiphers("sslRangeCiphers"); @@ -677,18 +834,18 @@ } } catch (Exception ex) { - debugWrite("JSSSocketFactory init - exception thrown:"+ - ex.toString()+"\n"); - System.err.println("JSSSocketFactory init - exception thrown:"+ - ex.toString()+"\n"); + debugWrite("JSSSocketFactory init - exception thrown:" + + ex.toString() + "\n"); + System.err.println("JSSSocketFactory init - exception thrown:" + + ex.toString() + "\n"); if (debugFile != null) debugFile.close(); // The idea is, if admin take the trouble to configure the // ocsp cache, and made a mistake, we want to make server // unavailable until they get it right - if((ex instanceof java.security.GeneralSecurityException) || - (ex instanceof java.lang.NumberFormatException)) - throw new IOException(ex.toString()); + if ((ex instanceof java.security.GeneralSecurityException) + || (ex instanceof java.lang.NumberFormatException)) + throw new IOException(ex.toString()); } if (debugFile != null) debugFile.close(); @@ -697,7 +854,7 @@ public Socket acceptSocket(ServerSocket socket) throws IOException { SSLSocket asock = null; try { - asock = (SSLSocket)socket.accept(); + asock = (SSLSocket) socket.accept(); if (wantClientAuth || requireClientAuth) { asock.requestClientAuth(true); if (requireClientAuth == true) { @@ -707,14 +864,14 @@ } } } catch (Exception e) { - throw new SocketException("SSL handshake error "+e.toString()); - } + throw new SocketException("SSL handshake error " + e.toString()); + } return asock; } public void handshake(Socket sock) throws IOException { - //((SSLSocket)sock).forceHandshake(); + // ((SSLSocket)sock).forceHandshake(); } public ServerSocket createSocket(int port) throws IOException { @@ -721,33 +878,31 @@ return createSocket(port, SSLServerSocket.DEFAULT_BACKLOG, null); } - public ServerSocket createSocket(int port, int backlog) - throws IOException { + public ServerSocket createSocket(int port, int backlog) throws IOException { return createSocket(port, backlog, null); } public ServerSocket createSocket(int port, int backlog, - InetAddress ifAddress) throws IOException { + InetAddress ifAddress) throws IOException { return createSocket(port, backlog, ifAddress, true); } public ServerSocket createSocket(int port, int backlog, - InetAddress ifAddress, boolean reuseAddr) throws IOException { + InetAddress ifAddress, boolean reuseAddr) throws IOException { if (!initialized) init(); SSLServerSocket socket = null; - socket = (SSLServerSocket)(new SSLServerSocket(port, backlog, - ifAddress, null, reuseAddr)); + socket = (SSLServerSocket) (new SSLServerSocket(port, backlog, + ifAddress, null, reuseAddr)); initializeSocket(socket); - return (ServerSocket)socket; + return (ServerSocket) socket; } private void initializeSocket(SSLServerSocket s) { try { /* - * Timeout's should not be enabled by default. - * Upper layers will call setSoTimeout() as needed. - * Zero means disable. + * Timeout's should not be enabled by default. Upper layers will + * call setSoTimeout() as needed. Zero means disable. */ s.setSoTimeout(0); if (wantClientAuth || requireClientAuth) { @@ -757,7 +912,7 @@ } else { s.requireClientAuth(SSLSocket.SSL_REQUIRE_NEVER); } - } + } s.setServerCertNickname(serverCertNick); } catch (Exception e) { } @@ -776,7 +931,8 @@ return null; } - public void configureSessionContext(javax.net.ssl.SSLSessionContext sslSessionContext) { + public void configureSessionContext( + javax.net.ssl.SSLSessionContext sslSessionContext) { return; } Index: src/org/apache/tomcat/util/net/jss/JSSImplementation.java =================================================================== --- src/org/apache/tomcat/util/net/jss/JSSImplementation.java (revision 292) +++ src/org/apache/tomcat/util/net/jss/JSSImplementation.java (revision 294) @@ -20,7 +20,7 @@ package org.apache.tomcat.util.net.jss; import java.net.Socket; -import java.io.*; + import org.apache.tomcat.util.net.AbstractEndpoint; import org.apache.tomcat.util.net.SSLImplementation; import org.apache.tomcat.util.net.SSLSupport; @@ -27,14 +27,12 @@ import org.apache.tomcat.util.net.SSLUtil; import org.apache.tomcat.util.net.ServerSocketFactory; -public class JSSImplementation extends SSLImplementation -{ - static final String JSSFactory = - "org.apache.tomcat.util.net.jss.JSSFactory"; +public class JSSImplementation extends SSLImplementation { + static final String JSSFactory = "org.apache.tomcat.util.net.jss.JSSFactory"; static final String SSLSocketClass = "org.mozilla.jss.ssl.SSLSocket"; - static org.apache.commons.logging.Log logger = - org.apache.commons.logging.LogFactory.getLog(JSSImplementation.class); + static org.apache.commons.logging.Log logger = org.apache.commons.logging.LogFactory + .getLog(JSSImplementation.class); private JSSFactory factory = null; @@ -43,9 +41,9 @@ try { Class factcl = Class.forName(JSSFactory); - factory = (JSSFactory)factcl.newInstance(); + factory = (JSSFactory) factcl.newInstance(); } catch (Exception e) { - if(logger.isDebugEnabled()) + if (logger.isDebugEnabled()) logger.debug("Error getting factory: " + JSSFactory, e); } } @@ -54,8 +52,7 @@ return "JSS"; } - public ServerSocketFactory getServerSocketFactory(AbstractEndpoint endpoint) - { + public ServerSocketFactory getServerSocketFactory(AbstractEndpoint endpoint) { ServerSocketFactory ssf = factory.getSocketFactory(endpoint); return ssf; } @@ -68,28 +65,28 @@ public SSLSupport getSSLSupport(javax.net.ssl.SSLSession session) { /* - * The Tomcat 6.0.26 docs says: - * This method has been deprecated since it adds a JSSE dependency - * to this interface. It will be removed in versions after 6.0.x. - * + * The Tomcat 6.0.26 docs says: This method has been deprecated since it + * adds a JSSE dependency to this interface. It will be removed in + * versions after 6.0.x. + * * But we have to provide a implementation of this method because it's * declared as abstract. - * + * * Unfortunately there does not appear to be any way to get SSLSupport * information from a session with JSS. JSS looks up the information * based on a socket, not a session. This done in SSLSocket.c * Java_org_mozilla_jss_ssl_SSLSocket_getStatus(). - * + * * So while it would be nice to provide a working implmentation there * doesn't seem to be an easy way to do this. Given that this method is * already deprecated and there hasn't been any evidence of it being * called it therefore seems reasonable to just return null to satify * the compiler's demand for an implementation. - * + * * Once this abstract method is removed from SSLImplementation in a * future release we can remove this stub. - * - * NOTE: This method has NOT yet been deprecated in Tomcat 7! + * + * NOTE: This method has NOT yet been deprecated in Tomcat 7! */ return null; } Index: src/org/apache/tomcat/util/net/jss/PlainPasswordFile.java =================================================================== --- src/org/apache/tomcat/util/net/jss/PlainPasswordFile.java (revision 292) +++ src/org/apache/tomcat/util/net/jss/PlainPasswordFile.java (revision 294) @@ -19,11 +19,13 @@ package org.apache.tomcat.util.net.jss; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Enumeration; import java.util.Properties; -import java.io.*; -import java.util.*; -public class PlainPasswordFile implements IPasswordStore{ +public class PlainPasswordFile implements IPasswordStore { private String mPwdPath = ""; private Properties mPwdStore; private static final String PASSWORD_WRITER_HEADER = ""; @@ -31,24 +33,23 @@ public PlainPasswordFile() { } - public void init(String pwdPath) - throws IOException - { - mPwdStore = new Properties(); - // initialize mPwdStore - mPwdPath = pwdPath; + public void init(String pwdPath) throws IOException { + mPwdStore = new Properties(); + // initialize mPwdStore + mPwdPath = pwdPath; - FileInputStream file = new FileInputStream(mPwdPath); - mPwdStore.load(file); + FileInputStream file = new FileInputStream(mPwdPath); + mPwdStore.load(file); } public String getPassword(String tag) { - return (String) mPwdStore.getProperty(tag); + return (String) mPwdStore.getProperty(tag); } // return an array of String-based tag - public Enumeration getTags() { - return mPwdStore.propertyNames(); + @SuppressWarnings("unchecked") + public Enumeration getTags() { + return (Enumeration) mPwdStore.propertyNames(); } public Object putPassword(String tag, String password) { @@ -55,9 +56,8 @@ return mPwdStore.setProperty(tag, password); } - public void commit() - throws IOException, ClassCastException, NullPointerException - { + public void commit() throws IOException, ClassCastException, + NullPointerException { FileOutputStream file = new FileOutputStream(mPwdPath); mPwdStore.store(file, PASSWORD_WRITER_HEADER); } Index: src/org/apache/tomcat/util/net/jss/JSSFactory.java =================================================================== --- src/org/apache/tomcat/util/net/jss/JSSFactory.java (revision 292) +++ src/org/apache/tomcat/util/net/jss/JSSFactory.java (revision 294) @@ -19,10 +19,13 @@ package org.apache.tomcat.util.net.jss; -import org.mozilla.jss.ssl.*; -import org.apache.tomcat.util.net.*; -import java.net.*; +import java.net.Socket; +import org.apache.tomcat.util.net.AbstractEndpoint; +import org.apache.tomcat.util.net.SSLSupport; +import org.apache.tomcat.util.net.ServerSocketFactory; +import org.mozilla.jss.ssl.SSLSocket; + class JSSFactory implements IJSSFactory { JSSFactory() { } @@ -32,6 +35,6 @@ } public SSLSupport getSSLSupport(Socket socket) { - return new JSSSupport((SSLSocket)socket); + return new JSSSupport((SSLSocket) socket); } } Index: src/org/apache/tomcat/util/net/jss/IPasswordStore.java =================================================================== --- src/org/apache/tomcat/util/net/jss/IPasswordStore.java (revision 292) +++ src/org/apache/tomcat/util/net/jss/IPasswordStore.java (revision 294) @@ -19,14 +19,18 @@ package org.apache.tomcat.util.net.jss; -import java.util.*; -import java.io.*; +import java.io.IOException; +import java.util.Enumeration; public interface IPasswordStore { public void init(String pwdPath) throws IOException; + public String getPassword(String tag); - public Enumeration getTags(); + + public Enumeration getTags(); + public Object putPassword(String tag, String password); - public void commit() - throws IOException, ClassCastException, NullPointerException; + + public void commit() throws IOException, ClassCastException, + NullPointerException; } Index: .settings/org.eclipse.jdt.core.prefs =================================================================== --- .settings/org.eclipse.jdt.core.prefs (revision 0) +++ .settings/org.eclipse.jdt.core.prefs (revision 294) @@ -0,0 +1,282 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=false +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=120 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=8 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=false +org.eclipse.jdt.core.formatter.join_wrapped_lines=false +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=space +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true Index: .settings/org.eclipse.jdt.ui.prefs =================================================================== --- .settings/org.eclipse.jdt.ui.prefs (revision 0) +++ .settings/org.eclipse.jdt.ui.prefs (revision 294) @@ -0,0 +1,56 @@ +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_PKI Project Profile +formatter_settings_version=12 +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=false +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=false +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.make_local_variable_final=false +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=false +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_trailing_whitespaces=true +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=true +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true