It itched me a lot that to enable SSL in TC4 a standard JDK has to be modified
(copy JSSE libs into jdk/jre/lib/ext and add
security.provider.3=com.sun.net.ssl.internal.ssl.Provider).
This was not necessary in TC 3.2.x because of different class loading
semantics.
In our environment jdks cannot well be modified due to separate JDKs/archs,
TCs, JSSEs, etc on shared read-only filesystems.
So here are three TC4 patches (against the latest CVS) that allow JSSE to
be picked up from anywhere on the filesystem.
Patches are along the lines Craig suggested yesterday.
1) Modify catalina.sh and catalina.bat as indicated below to be able to add
external jars to the system classpath (new env var CATALINA_SYSTEM_CLASSPATH).
2) Modify
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/net/SSLServerSocketFactory.java
to dynamically add the com.sun.net.ssl.internal.ssl.Provider provider
In case you don't like 1) because it allows external things to be added,
then 2) is still of value because people don't need to write their own
SSLServerSocketFactory
Hope someone wants to try this out and commit before 4.0 FCS.
Wolfgang.
--- SSLServerSocketFactory.java.orig Fri Sep 7 20:39:08 2001
+++ SSLServerSocketFactory.java Mon Sep 10 15:31:16 2001
@@ -386,6 +386,14 @@
Security.addProvider(new sun.security.provider.Sun());
Security.addProvider(new
com.sun.net.ssl.internal.ssl.Provider());
*/
+ // even if jsse provider is already installed it can't hurt to
make sure
+ // and we do need to install it here if it isn't hard-wired in
jdk/jre/lib/security/java.security
+ try {
+
java.security.Security.addProvider(((java.security.Provider)
Class.forName("com.sun.net.ssl.internal.ssl.Provider").newInstance()));
+ }
+ catch (IllegalAccessException exc) {}
+ catch (ClassNotFoundException exc) {}
+ catch (InstantiationException exc) {}
// Create an SSL context used to create an SSL socket factory
SSLContext context = SSLContext.getInstance(protocol);
--- jakarta-tomcat-4.0/catalina/src/bin/catalina.sh.orig Sat Sep 8
12:13:28 2001
+++ jakarta-tomcat-4.0/catalina/src/bin/catalina.sh Mon Sep 10 16:28:25 2001
@@ -70,6 +70,12 @@
CP=$CP:"$JAVA_HOME/lib/tools.jar"
fi
+# add CATALINA_SYSTEM_CLASSPATH custom jars to classpath. For example define
+# export
CATALINA_SYSTEM_CLASSPATH=/path/to/jsse/lib/jsse.jar:/path/to/jsse/lib/jnet.jar:/path/to/jsse/lib/jcert.jar
+if [ ! -z "$CATALINA_SYSTEM_CLASSPATH" ] ; then
+ CP=$CP:$CATALINA_SYSTEM_CLASSPATH
+fi
+
# convert the existing path to windows
if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] ; then
CP=`cygpath --path --windows "$CP"`
--- jakarta-tomcat-4.0/catalina/src/bin/catalina.bat.orig Mon Aug 27
21:10:25 2001
+++ jakarta-tomcat-4.0/catalina/src/bin/catalina.bat Mon Sep 10 16:16:43 2001
@@ -65,6 +65,11 @@
rem ----- Set Up The Runtime Classpath
----------------------------------------
set CP=%CATALINA_HOME%\bin\bootstrap.jar;%JAVA_HOME%\lib\tools.jar
+
+# add CATALINA_SYSTEM_CLASSPATH custom jars to classpath. For example define
+# set
CATALINA_SYSTEM_CLASSPATH=\path\to\jsse\lib\jsse.jar;\path\to\jsse\lib\jnet.jar;\path\to\jsse\lib\jcert.jar
+set CP=%CP%;%CATALINA_SYSTEM_CLASSPATH%
+
set CLASSPATH=%CP%
echo Using CATALINA_BASE: %CATALINA_BASE%
echo Using CATALINA_HOME: %CATALINA_HOME%
SSLServerSocketFactory.diff
catalina.sh.diff
catalina.bat.diff