You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by al...@apache.org on 2013/05/30 17:09:31 UTC
svn commit: r1487886 - in /juddi/trunk: bin/
juddi-core/src/main/java/org/apache/juddi/config/
juddi-core/src/main/java/org/apache/juddi/cryptor/
juddi-core/src/main/java/org/apache/juddi/v3/auth/
juddi-core/src/test/java/org/apache/juddi/auth/ juddi-c...
Author: alexoree
Date: Thu May 30 15:09:31 2013
New Revision: 1487886
URL: http://svn.apache.org/r1487886
Log:
Adding command line utility for encrypting and hashing passwords (windows only). Perhaps this can be redone as a maven command
Adding MD5 based XML user store (MD5XMLDocAuthenticator.java)
Adding tests for MD5XMLDocAuthenticator
This is partial solution for JIRA JUDDI-618
Added:
juddi/trunk/bin/
juddi/trunk/bin/cryptor-dev.bat
juddi/trunk/bin/md5crypt.bat
juddi/trunk/bin/md5cryptdev.bat
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/MD5XMLDocAuthenticator.java
- copied, changed from r1486692, juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java
juddi/trunk/juddi-core/src/test/resources/juddi-users-hashed.xml
- copied, changed from r1486692, juddi/trunk/juddi-core/src/test/resources/juddi-users-encrypted.xml
Modified:
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/cryptor/CryptorFactory.java
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java
juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/XMLDocAuthenticator.java
juddi/trunk/juddi-core/src/test/java/org/apache/juddi/auth/AuthenticatorTest.java
Added: juddi/trunk/bin/cryptor-dev.bat
URL: http://svn.apache.org/viewvc/juddi/trunk/bin/cryptor-dev.bat?rev=1487886&view=auto
==============================================================================
--- juddi/trunk/bin/cryptor-dev.bat (added)
+++ juddi/trunk/bin/cryptor-dev.bat Thu May 30 15:09:31 2013
@@ -0,0 +1 @@
+java -cp ../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/* org.apache.juddi.v3.auth.CrytorUtil org.apache.juddi.cryptor.DefaultCryptor
\ No newline at end of file
Added: juddi/trunk/bin/md5crypt.bat
URL: http://svn.apache.org/viewvc/juddi/trunk/bin/md5crypt.bat?rev=1487886&view=auto
==============================================================================
--- juddi/trunk/bin/md5crypt.bat (added)
+++ juddi/trunk/bin/md5crypt.bat Thu May 30 15:09:31 2013
@@ -0,0 +1 @@
+rem TODO, this needs to created based on the deployment package, perhaps with tomcat
\ No newline at end of file
Added: juddi/trunk/bin/md5cryptdev.bat
URL: http://svn.apache.org/viewvc/juddi/trunk/bin/md5cryptdev.bat?rev=1487886&view=auto
==============================================================================
--- juddi/trunk/bin/md5cryptdev.bat (added)
+++ juddi/trunk/bin/md5cryptdev.bat Thu May 30 15:09:31 2013
@@ -0,0 +1 @@
+java -cp ../juddi-tomcat/target/tomcat/apache-tomcat-6.0.26/webapps/juddiv3/WEB-INF/lib/*; org.apache.juddi.v3.auth.MD5XMLDocAuthenticator
\ No newline at end of file
Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java?rev=1487886&r1=1487885&r2=1487886&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java (original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/config/Property.java Thu May 30 15:09:31 2013
@@ -1,5 +1,8 @@
package org.apache.juddi.config;
+import org.apache.juddi.v3.auth.CryptedXMLDocAuthenticator;
+import org.apache.juddi.v3.auth.MD5XMLDocAuthenticator;
+
public interface Property {
public final static String JDDU_SUBSCRIPTION_MAXENTITIES="juddi.subscription.maxentities";
public final static String JUDDI_ROOT_PUBLISHER = "juddi.root.publisher";
@@ -50,7 +53,14 @@ public interface Property {
public final static String DEFAULT_CRYPTOR = "org.apache.juddi.cryptor.DefaultCryptor";
public final static String DEFAULT_USERSFILE = "juddi-users.properties";
public final static String DEFAULT_XML_USERSFILE = "juddi-users.xml";
+ /**
+ * @see CryptedXMLDocAuthenticator
+ */
public final static String DEFAULT_ENCRYPTED_XML_USERSFILE = "juddi-users-encrypted.xml";
+ /**
+ * @see MD5XMLDocAuthenticator
+ */
+ public final static String DEFAULT_HASHED_XML_USERSFILE = "juddi-users-hashed.xml";
public final static String DEFAULT_SECURITY_DOMAIN = "java:/jaas/other";
public final static boolean DEFAULT_LOAD_INSTALL_DATA = true;
public final static String DEFAULT_BASE_URL = "http://localhost:8080/juddiv3";
Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/cryptor/CryptorFactory.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/cryptor/CryptorFactory.java?rev=1487886&r1=1487885&r2=1487886&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/cryptor/CryptorFactory.java (original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/cryptor/CryptorFactory.java Thu May 30 15:09:31 2013
@@ -49,6 +49,32 @@ public abstract class CryptorFactory {
cryptor = createCryptor();
return cryptor;
}
+
+
+ public static Cryptor getCryptor(String className) throws Exception {
+ Class<?> cryptorClass = null;
+ try {
+ // Use Loader to locate & load the Cryptor implementation
+ cryptorClass = ClassUtil.forName(className, CryptorFactory.class);
+ }
+ catch(ClassNotFoundException e) {
+ log.error("The specified Cryptor class '" + className + "' was not found in classpath.");
+ log.error(e);
+ throw e;
+ }
+
+ try {
+ // try to instantiate the Cryptor implementation
+ cryptor = (Cryptor)cryptorClass.newInstance();
+ }
+ catch(Exception e) {
+ log.error("Exception while attempting to instantiate the implementation of Cryptor: " + cryptorClass.getName() + "\n" + e.getMessage());
+ log.error(e);
+ throw e;
+ }
+
+ return cryptor;
+ }
/*
* Returns a new instance of a Cryptor.
Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java?rev=1487886&r1=1487885&r2=1487886&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java (original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java Thu May 30 15:09:31 2013
@@ -55,6 +55,10 @@ public class CryptedXMLDocAuthenticator
public CryptedXMLDocAuthenticator() throws JAXBException, IOException, ConfigurationException {
super();
}
+
+ private CryptedXMLDocAuthenticator(boolean b) {
+ super(b);
+ }
@Override
protected String getFilename() throws ConfigurationException {
return AppConfig.getConfiguration().getString(Property.JUDDI_USERSFILE, Property.DEFAULT_ENCRYPTED_XML_USERSFILE);
Copied: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/MD5XMLDocAuthenticator.java (from r1486692, juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java)
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/MD5XMLDocAuthenticator.java?p2=juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/MD5XMLDocAuthenticator.java&p1=juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java&r1=1486692&r2=1487886&rev=1487886&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/CryptedXMLDocAuthenticator.java (original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/MD5XMLDocAuthenticator.java Thu May 30 15:09:31 2013
@@ -18,22 +18,13 @@
package org.apache.juddi.v3.auth;
import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
import javax.xml.bind.JAXBException;
-
+import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.juddi.config.AppConfig;
import org.apache.juddi.config.Property;
-import org.apache.juddi.cryptor.Cryptor;
-import org.apache.juddi.cryptor.CryptorFactory;
import org.apache.juddi.v3.error.AuthenticationException;
import org.apache.juddi.v3.error.ErrorMessage;
import org.apache.juddi.v3.error.FatalErrorException;
@@ -41,9 +32,10 @@ import org.apache.juddi.v3.error.Registr
import org.apache.juddi.v3.error.UnknownUserException;
/**
- * @author Anou Manavalan
+ * Uses MD5 hashes for passwords
+ * @author Alex O'Ree
*/
-public class CryptedXMLDocAuthenticator extends XMLDocAuthenticator {
+public class MD5XMLDocAuthenticator extends XMLDocAuthenticator {
private Log logger = LogFactory.getLog(this.getClass());
/**
@@ -52,12 +44,19 @@ public class CryptedXMLDocAuthenticator
* @throws ConfigurationException
*
*/
- public CryptedXMLDocAuthenticator() throws JAXBException, IOException, ConfigurationException {
+ public MD5XMLDocAuthenticator() throws JAXBException, IOException, ConfigurationException {
super();
}
+ /**
+ * A private constructor used for calculating hashes only
+ * @param x
+ */
+ private MD5XMLDocAuthenticator(boolean x) {
+ super(x);
+ }
@Override
protected String getFilename() throws ConfigurationException {
- return AppConfig.getConfiguration().getString(Property.JUDDI_USERSFILE, Property.DEFAULT_ENCRYPTED_XML_USERSFILE);
+ return AppConfig.getConfiguration().getString(Property.JUDDI_USERSFILE, Property.DEFAULT_HASHED_XML_USERSFILE);
}
/**
*
@@ -65,42 +64,21 @@ public class CryptedXMLDocAuthenticator
public String authenticate(String userID, String credential)
throws AuthenticationException, FatalErrorException {
preProcess(userID, credential);
- String encryptedCredential = encrypt(credential);
+ String encryptedCredential = hash(credential);
return postProcess(userID, encryptedCredential);
}
/**
*
*/
- private String encrypt(String str) throws FatalErrorException {
+ private String hash(String str) throws FatalErrorException {
try {
- Cryptor cryptor = (Cryptor) CryptorFactory.getCryptor();
- return cryptor.encrypt(str);
- } catch (InvalidKeyException e) {
- logger.error("Invalid Key Exception in crypting the password", e);
+ return DigestUtils.md5Hex(str) ;
+ //return instance..encrypt(str);
+ } catch (Exception e) {
+ logger.error("Exception caught hashing password", e);
throw new FatalErrorException(new ErrorMessage(
"errors.auth.cryptor.InvalidKey", e.getMessage()));
- } catch (NoSuchPaddingException e) {
- logger.error("Padding Exception in crypting the password", e);
- throw new FatalErrorException(new ErrorMessage(
- "errors.auth.cryptor.Padding", e.getMessage()));
- } catch (NoSuchAlgorithmException e) {
- logger.error("Algorithm Exception in crypting the password", e);
- throw new FatalErrorException(new ErrorMessage(
- "errors.auth.cryptor.Algorithm", e.getMessage()));
- } catch (InvalidAlgorithmParameterException e) {
- logger.error("Algorithm parameter Exception in crypting the password",
- e);
- throw new FatalErrorException(new ErrorMessage(
- "errors.auth.cryptor.AlgorithmParam", e.getMessage()));
- } catch (IllegalBlockSizeException e) {
- logger.error("Block size Exception in crypting the password", e);
- throw new FatalErrorException(new ErrorMessage(
- "errors.auth.cryptor.BlockSize", e.getMessage()));
- } catch (BadPaddingException e) {
- logger.error("Bad Padding Exception in crypting the password", e);
- throw new FatalErrorException(new ErrorMessage(
- "errors.auth.cryptor.BadPadding", e.getMessage()));
- }
+ }
}
/**
* @param userID
@@ -141,4 +119,11 @@ public class CryptedXMLDocAuthenticator
}
return userID;
}
+
+ public static void main(String[] args) throws Exception
+ {
+ System.out.print("Password: ");
+ char[] readPassword = System.console().readPassword();
+ System.out.println("Cipher: " + new MD5XMLDocAuthenticator(true).hash(new String(readPassword)));
+ }
}
Modified: juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/XMLDocAuthenticator.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/XMLDocAuthenticator.java?rev=1487886&r1=1487885&r2=1487886&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/XMLDocAuthenticator.java (original)
+++ juddi/trunk/juddi-core/src/main/java/org/apache/juddi/v3/auth/XMLDocAuthenticator.java Thu May 30 15:09:31 2013
@@ -19,7 +19,9 @@ package org.apache.juddi.v3.auth;
import java.io.IOException;
import java.io.InputStream;
+import java.util.HashMap;
import java.util.Hashtable;
+import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
@@ -66,7 +68,7 @@ public class XMLDocAuthenticator impleme
{
private static Log log = LogFactory.getLog(AuthenticatorFactory.class);
/** Container for the user credentials */
- Hashtable<String,User> userTable;
+ Map<String,User> userTable;
/**
*
@@ -74,6 +76,13 @@ public class XMLDocAuthenticator impleme
public XMLDocAuthenticator() throws JAXBException, IOException, ConfigurationException {
readUserFile();
}
+
+ /**
+ * an empty constructor
+ */
+ public XMLDocAuthenticator(boolean b) {
+
+ }
protected String getFilename() throws ConfigurationException {
return AppConfig.getConfiguration().getString(Property.JUDDI_USERSFILE, Property.DEFAULT_XML_USERSFILE);
@@ -87,7 +96,7 @@ public class XMLDocAuthenticator impleme
*/
public synchronized void readUserFile() throws JAXBException, IOException, ConfigurationException
{
- userTable = new Hashtable<String,User>();
+ userTable = new HashMap<String, User> ();
String usersFileName = getFilename();
log.info("Reading jUDDI Users File: " + usersFileName + "...");
InputStream stream = ClassUtil.getResource(usersFileName, this.getClass()).openStream();
Modified: juddi/trunk/juddi-core/src/test/java/org/apache/juddi/auth/AuthenticatorTest.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/test/java/org/apache/juddi/auth/AuthenticatorTest.java?rev=1487886&r1=1487885&r2=1487886&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/test/java/org/apache/juddi/auth/AuthenticatorTest.java (original)
+++ juddi/trunk/juddi-core/src/test/java/org/apache/juddi/auth/AuthenticatorTest.java Thu May 30 15:09:31 2013
@@ -30,6 +30,7 @@ import org.apache.juddi.v3.auth.Authenti
import org.apache.juddi.v3.auth.CryptedXMLDocAuthenticator;
import org.apache.juddi.v3.auth.JUDDIAuthenticator;
import org.apache.juddi.v3.auth.JuddiUsers;
+import org.apache.juddi.v3.auth.MD5XMLDocAuthenticator;
import org.apache.juddi.v3.auth.User;
import org.apache.juddi.v3.auth.XMLDocAuthenticator;
import org.apache.juddi.v3.error.AuthenticationException;
@@ -172,4 +173,26 @@ public class AuthenticatorTest
Authenticator auth = new CryptedXMLDocAuthenticator();
auth.authenticate("anou_mana","badpass");
}
+
+
+ @Test
+ public void testMD5XMLDocAuthenticator()
+ {
+ try {
+ Authenticator auth = new CryptedXMLDocAuthenticator();
+ auth.authenticate("anou_mana","password");
+ auth.authenticate("bozo","clown");
+ auth.authenticate("sviens","password");
+ } catch (Exception e) {
+ logger.error(e.getMessage(),e);
+ Assert.fail("unexpected");
+ }
+ }
+
+ @Test(expected=UnknownUserException.class)
+ public void testBadMD5XMLDocAuthenticator() throws Exception
+ {
+ Authenticator auth = new MD5XMLDocAuthenticator();
+ auth.authenticate("anou_mana","badpass");
+ }
}
Copied: juddi/trunk/juddi-core/src/test/resources/juddi-users-hashed.xml (from r1486692, juddi/trunk/juddi-core/src/test/resources/juddi-users-encrypted.xml)
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-core/src/test/resources/juddi-users-hashed.xml?p2=juddi/trunk/juddi-core/src/test/resources/juddi-users-hashed.xml&p1=juddi/trunk/juddi-core/src/test/resources/juddi-users-encrypted.xml&r1=1486692&r2=1487886&rev=1487886&view=diff
==============================================================================
--- juddi/trunk/juddi-core/src/test/resources/juddi-users-encrypted.xml (original)
+++ juddi/trunk/juddi-core/src/test/resources/juddi-users-hashed.xml Thu May 30 15:09:31 2013
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<juddi-users>
- <user userid="anou_mana" password="+j/kXkZJftwTFTBH6Cf6IQ=="/>
- <user userid="bozo" password="Na2Ait+2aW0="/>
- <user userid="sviens" password="+j/kXkZJftwTFTBH6Cf6IQ=="/>
+ <user userid="anou_mana" password="5f4dcc3b5aa765d61d8327deb882cf99"/>
+ <user userid="bozo" password="8b61c11eb8baedd53d2e99d1a01fa7bb"/>
+ <user userid="sviens" password="5f4dcc3b5aa765d61d8327deb882cf99"/>
</juddi-users>
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org