Verity doesn't work when you run ColdFusion 7 (unsupported) on Java 5 or Java 6. The problem is not in ColdFusion or Verity - it is in the venerable old Cryptix Java security provider which doesn't work with Java 5 or Java 6. Fortunately Cryptix is open source so you can get Cryptix and change it as necessary to make it work with Java 6 (or Java 5).

Java 5 introduced several new methods for security providers.



The only method which must be overridden to make Cryptix work with Java 5 or 6 is getService(). This is because the Cryptix way of naming services (name=Cipher.Blowfish) is different from the current Java two-part names
(type=Cipher, name=Blowfish).

You can fix Cryptix by adding a getService() method to the Cryptix provider and then installing this updated Cryptix provider into the Java JRE which ColdFusion uses.

Here's how to do it for Java 6 on Windows:

  1. First, install the Java 6 Java Development Kit (JDK) on your system.
    Get the Java 6 JDK from http://java.sun.com/javase/downloads/index.jsp

  2. Next, get Cryptix from http://www.cryptix.org/. Download this file:

    Cryptix V3 3.2.0 2000/10/02 cryptix32-20001002-r3.2.0.zip

  3. Unzip cryptix32-20001002-r3.2.0.zip into a working directory.

  4. Edit the file {workingDirectory}srccryptixproviderCryptix.java and insert the following Java code just before the closing brace at the bottom of the file (view in plain text):

    view plain print about
    1//---------------------------------------
    2private static java.util.Hashtable registered = new java.util.Hashtable();
    3public Provider.Service getService(String type, String algorithm)
    4 throws NullPointerException
    5{ String prop = CryptixProperties.getProperty( type + "." + algorithm);
    6 if (prop == null) return null;
    7 Provider.Service svc = (Provider.Service) registered.get(prop);
    8 if (svc == null) {
    9 svc = new Provider.Service(this, type, algorithm, prop, null, null);
    10 registered.put(prop, svc);
    11 }
    12 return svc ;
    13}
    14//---------------------------------------


  5. Open a command-prompt window and make sure the Java 1.6 jdk in and jrein directories are both in your PATH.

  6. From the {workingDirectory}src directory, compile Cryptix with the Java 6 compiler:

    CD {workingDirectory}src
    DIR /s /b *.java > sources.txt
    XCOPY /S /Y *.properties ..classes
    JAVAC -g -nowarn -source 1.4 -target 1.6 -d ..classes @sources.txt

  7. From the newly created {workingDirectory}classes directory, build a Cryptix jar file:

    CD {workingDirectory}classes
    JAR cf cryptix.jar *

  8. Determine where your ColdFusion Java Runtime Environment (JRE) directory is. For a default standalone CF7.0.2 installation, this would be C:CFusionMX7 untimejre

  9. Copy cryptix.jar to your {ColdFusion_JRE}libext directory.

  10. Edit the file {ColdFusion_JRE}libsecurityjava.security and add this line:

    security.provider.NN=cryptix.provider.Cryptix

    where NN is the next available provider number (the providers must be in ascending numerical order).

    Edit carefully - everything in this file is case-sensitive.
  11. Restart ColdFusion



Verity should now work with ColdFusion running on Java 6. Don't forget that the "ColdFusion MX 7 Search Server" Windows service must be running for Verity to work.

Don't attempt to use the algorithms from the Cryptix provider with ColdFusion Encrypt() and Decrypt() functions because Cryptix is called differently from the current Java algorithms. Nevertheless, this fix should enable most old Java code (like Verity) which calls the the Cryptix methods directly.


A simpler way for minimalists:

You don't really need to install the whole Cryptix library.
You could replace just the single class which gives Java 5 & Java 6 a problem.

Steps 1-5 are the same.

6) From the {workingDirectory}src directory, compile just the Cryptix main class

JAVAC -g -nowarn -source 1.4 -target 1.6 cryptixprovider Cryptix.java

7) From the same {workingDirectory}src directory, build a 'patch' jar file

JAR cf cryptix_patch.jar cryptixprovider Cryptix.class

8) Copy cryptix_patch.jar to {ColdFusion_JRE}libupdates

9) Restart ColdFusion

You don't need to touch anything in the {ColdFusion_JRE} if you choose this method.