[utilities COMMIT] in /xmlsectool/trunk/src: main/java/edu/internet2/middleware/security/XmlSecTool.java main/java/ed...

noreply at shibboleth.net noreply at shibboleth.net
Mon Mar 18 05:41:10 EDT 2013


Author: iay
Date: Mon Mar 18 05:41:09 2013
New Revision: 357

URL: http://svn.shibboleth.net/view/utilities?rev=357&view=rev
Log:
XSTJ-38 blacklist MD5 algorithm during signature verification

Added:
    xmlsectool/trunk/src/test/resources/manual/XSTJ-38/
    xmlsectool/trunk/src/test/resources/manual/XSTJ-38/original.xml   (with props)
    xmlsectool/trunk/src/test/resources/manual/XSTJ-38/readme.md
    xmlsectool/trunk/src/test/resources/manual/XSTJ-38/sha256-md5d.xml   (with props)
    xmlsectool/trunk/src/test/resources/manual/XSTJ-38/sha256-md5s.xml   (with props)
    xmlsectool/trunk/src/test/resources/manual/XSTJ-38/sha256.xml   (with props)
Modified:
    xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecTool.java
    xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecToolCommandLineArguments.java

Modified: xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecTool.java
URL: http://svn.shibboleth.net/view/utilities/xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecTool.java?rev=357&r1=356&r2=357&view=diff
==============================================================================
--- xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecTool.java (original)
+++ xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecTool.java Mon Mar 18 05:41:09 2013
@@ -139,6 +139,31 @@
             cli.printHelp(System.out);
             System.exit(RC_OK);
         }
+        
+        if (cli.doClearBlacklist()) {
+            cli.getBlacklist().clear();
+        }
+        if (cli.doListBlacklist()) {
+            System.out.println("Digest algorithm blacklist:");
+            if (cli.getBlacklist().getDigestBlacklist().isEmpty()) {
+                System.out.println("   blacklist is empty");
+            } else {
+                for (String uri: cli.getBlacklist().getDigestBlacklist()) {
+                    System.out.println("   " + uri);
+                }
+            }
+            System.out.println();
+            System.out.println("Signature algorithm blacklist:");
+            if (cli.getBlacklist().getSignatureBlacklist().isEmpty()) {
+                System.out.println("   blacklist is empty");
+            } else {
+                for (String uri: cli.getBlacklist().getSignatureBlacklist()) {
+                    System.out.println("   " + uri);
+                }
+            }
+            System.out.println();
+            System.exit(RC_OK);
+        }
 
         initLogging(cli);
 
@@ -661,6 +686,27 @@
 
         final Reference ref = extractReference(signature);
         markIdAttribute(xmlDocument.getDocumentElement(), ref);
+        
+        // check reference digest algorithm against blacklist
+        try {
+            String alg = ref.getMessageDigestAlgorithm().getAlgorithmURI();
+            log.debug("blacklist checking digest {}", alg);
+            if (cli.getBlacklist().isBlacklistedDigest(alg)) {
+                log.error("Digest algorithm {} is blacklisted", alg);
+                System.exit(RC_SIG);
+            }
+        } catch (XMLSignatureException e) {
+            log.error("unable to retrieve signature digest algorithm", e);
+            System.exit(RC_SIG);
+        }
+        
+        // check signature algorithm against blacklist
+        String alg = signature.getSignedInfo().getSignatureMethodURI();
+        log.debug("blacklist checking signature method {}", alg);
+        if (cli.getBlacklist().isBlacklistedSignature(alg)) {
+            log.error("Signature algorithm {} is blacklisted", alg);
+            System.exit(RC_SIG);
+        }        
 
         Key verificationKey = SecurityHelper.extractVerificationKey(getCredential(cli));
         log.debug("Verifying XML signature with key\n{}", Base64.encodeBytes(verificationKey.getEncoded()));

Modified: xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecToolCommandLineArguments.java
URL: http://svn.shibboleth.net/view/utilities/xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecToolCommandLineArguments.java?rev=357&r1=356&r2=357&view=diff
==============================================================================
--- xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecToolCommandLineArguments.java (original)
+++ xmlsectool/trunk/src/main/java/edu/internet2/middleware/security/XmlSecToolCommandLineArguments.java Mon Mar 18 05:41:09 2013
@@ -21,7 +21,11 @@
 import jargs.gnu.CmdLineParser.OptionException;
 
 import java.io.PrintStream;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 
 import org.opensaml.xml.encryption.EncryptionConstants;
 import org.opensaml.xml.signature.SignatureConstants;
@@ -29,6 +33,82 @@
 /** Command line arguments for the {@link XmlSecTool} command line tool. */
 public class XmlSecToolCommandLineArguments {
 
+    /**
+     * A blacklist of digest and signature algorithms we should not accept during
+     * signature verification.

[... 192 lines stripped ...]


More information about the commits mailing list