We've already done this as part of the Jaffa (jaffa.sourceforge.net) open
source project. For more details see...

The Source Code @
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jaffa/JaffaCore/source/java/o
rg/jaffa/tomcat/realm/JDBCEncryptionRealm.java?rev=HEAD&content-type=text/vn
d.viewcvs-markup

The Jaffa Site @ http://jaffa.sf.net

The JAR, if you want the easy way... is attached!

This has been tested with most tomcat releases from 3.3a upto 4.1.24 and
works. It supports two types of encryption signatures

String xxx(String password) and
String xxx(String password, String Userid) in case you want to use their
user id as part of the key for the encryption

You provide the class name and the method name in server.xml, and it looks
for either method 1 or 2 and uses that to encrypt the password, before
comparing it with the one in the database. It does not try to decrypt the
database password, so a one way encryption algorithm can be supported.

This Realm also allow you some other features like extending the where
clause for the retrieve on user records, and the select for how to read the
roles (incase you don't want to create additional views!)

An example of how it can be used in server.xml is...

<Realm
    className          = "org.jaffa.tomcat.realm.JDBCEncryptionRealm"
    debug              = "0"
    driverName         = "oracle.jdbc.driver.OracleDriver"
    connectionURL      = "jdbc:oracle:thin:@myhost.mydomain.com:1521:mydb"
    connectionName     = "mydbuser"
    connectionPassword = "mydbpass"
    userTable          = "users"
    userNameCol        = "user_id"
    userCredCol        = "password"
    userClause         = "password is not null and user_status='Active'"
    userRoleTable      = "user_roles"
    roleNameCol        = "role_name"
    encryptionClass    = "com.mycompany.services.Encryption"
    encryptionMethod   = "encrypt"
/>

Just make sure you but the attached JAR, and your JAR in the /server/lib
directory, and put the database driver JAR(s) in the same place or in
/common/lib

Hope this helps...

Paul Extance

-----Original Message-----
From: Phil Steitz [mailto:[EMAIL PROTECTED] 
Sent: Saturday, May 31, 2003 9:25 AM
To: Tomcat Users List
Subject: Re: Alternate password encyption code?

Jeff Sexton wrote:
> On Thu, 29 May 2003, Raible, Matt wrote:
> 
>>Why don't you just have the JDBCRealm do it - add digest="SHA".
> 
> 
> I need something other than SHA, I need to use my own custom code for an
> encyrption method of my own that is not provided by JDBCRealm
> 
> 
>>To programmatically do it using form-based authentication, I've used a
>>LoginServlet that's mapped to "auth" in my login.jsp's form.  In this
>>servlet, I encrypt the password and redirect to "j_security_check" - is
that
>>what you're looking for?
> 
> 
> Maybe.  I'll do some reading about form-based authentication.  I'm not
> sure.
> 
> I'm after this because I already have set up a JDBCRealm based system,
> with BASIC authentication, and SHA, under Tomcat for both servlets and
> cocoon stuff.  Now I want to tie this together with another application
> that encypts passwords differently from any method available in JDBCRealm.
> 
> I have the code for the encyption.  If I could simply drop this code into
> the user validation JDBCRealm does for me in Tomcat, it'd be great because
> the security would all work and I wouldn't have to create any
> user/password management pages of my own.

Based on the documentation here

http://jakarta.apache.org/tomcat/tomcat-4.1-doc/realm-howto.html#Digested%20
Passwords

and a quick look at the sources here

http://cvs.apache.org/viewcvs.cgi/*checkout*/jakarta-tomcat-4.0/catalina/src
/
share/org/apache/catalina/realm/JDBCRealm.java?rev=HEAD&content-type=text/pl
ain

it does not look to me like you are going to be able to do this without 
hacking the JDBC Realm implementation.  The tomcat JDBC Realm 
implementation supports digested (*not* encrytped) passwords using 
java.security.MessageDigest to do the hashing.  This means that the 
hashing must be performed using one of the standard algorithms specified 
here
http://java.sun.com/j2se/1.4.1/docs/guide/security/CryptoSpec.html#AppA

You are probably best off going with one of the approaches that Matt has 
outlined if you want to serve login pages from the tomcat nodes.


Phil



> 
> If I can do this, I can tie Tomcat authentication to the password system
> my company has on other systems.
> 
> Any tips are helpful!  I'm a little lost with this.
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to