aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--moaSig/common/src/main/resources/resources/schemas/MOA-SPSS-config-3.2.0.xsd1
-rw-r--r--moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationPartsBuilder.java84
-rw-r--r--moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java48
-rw-r--r--moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java42
-rw-r--r--moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureVerificationInvoker.java2
5 files changed, 103 insertions, 74 deletions
diff --git a/moaSig/common/src/main/resources/resources/schemas/MOA-SPSS-config-3.2.0.xsd b/moaSig/common/src/main/resources/resources/schemas/MOA-SPSS-config-3.2.0.xsd
index 986903d..279e027 100644
--- a/moaSig/common/src/main/resources/resources/schemas/MOA-SPSS-config-3.2.0.xsd
+++ b/moaSig/common/src/main/resources/resources/schemas/MOA-SPSS-config-3.2.0.xsd
@@ -137,6 +137,7 @@
<xs:element name="SignatureVerification" minOccurs="0">
<xs:complexType>
<xs:sequence>
+ <xs:element name="StrictSignatureValueParsing" type="xs:boolean" minOccurs="0" maxOccurs="1" />
<xs:element name="CertificateValidation">
<xs:complexType>
<xs:sequence>
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationPartsBuilder.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationPartsBuilder.java
index 6a79a87..dc18239 100644
--- a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationPartsBuilder.java
+++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationPartsBuilder.java
@@ -52,7 +52,6 @@ import at.gv.egovernment.moa.spss.MOAApplicationException;
import at.gv.egovernment.moa.spss.api.common.TSLConfiguration;
import at.gv.egovernment.moa.spss.api.impl.TSLConfigurationImpl;
import at.gv.egovernment.moa.spss.api.xmlbind.ProfileParser;
-import at.gv.egovernment.moa.spss.api.xmlbind.TransformParser;
import at.gv.egovernment.moa.spss.util.MessageProvider;
import at.gv.egovernment.moaspss.logging.LogMsg;
import at.gv.egovernment.moaspss.logging.Logger;
@@ -61,7 +60,6 @@ import at.gv.egovernment.moaspss.util.DOMUtils;
import at.gv.egovernment.moaspss.util.MiscUtil;
import at.gv.egovernment.moaspss.util.StringUtils;
import at.gv.egovernment.moaspss.util.XPathUtils;
-import iaik.asn1.structures.Name;
//import iaik.ixsil.exceptions.URIException;
//import iaik.ixsil.util.URI;
import iaik.pki.pathvalidation.ChainingModes;
@@ -69,7 +67,6 @@ import iaik.pki.revocation.RevocationSourceTypes;
import iaik.server.modules.xml.BlackListEntry;
import iaik.server.modules.xml.ExternalReferenceChecker;
import iaik.server.modules.xml.WhiteListEntry;
-import iaik.server.modules.xmlverify.TransformationParsingException;
import iaik.utils.RFC2253NameParser;
import iaik.utils.RFC2253NameParserException;
import iaik.xml.crypto.utils.URI;
@@ -100,7 +97,7 @@ public class ConfigurationPartsBuilder {
private static final int SHORT_TIME_CERT_DEFAULT_INTERVAL = 0;
private static final boolean SHORT_TIME_CERT_DEFAULT_ETSI = true;
-
+
//
// XPath expressions to select certain parts of the configuration
//
@@ -180,6 +177,10 @@ public class ConfigurationPartsBuilder {
+ CONF + "PathConstruction/"
+ CONF + "AutoAddEECertificates";
+ private static final String STRICT_SIGNATURE_VALUE_PARSING_XPATH_ =
+ ROOT + CONF + "SignatureVerification/"
+ + CONF + "StrictSignatureValueParsing";
+
private static final String USE_AUTHORITY_INFO_ACCESS_XPATH_ =
ROOT + CONF + "SignatureVerification/"
+ CONF + "CertificateValidation/"
@@ -212,17 +213,17 @@ public class ConfigurationPartsBuilder {
+ CONF + "RevocationChecking/"
+ CONF + "CrlRetentionIntervals/"
+ CONF + "CA";
-
+
private static final String SHORT_TIME_CERTS_INTERVALS_XPATH =
ROOT + CONF + "SignatureVerification/"
+ CONF + "CertificateValidation/"
+ CONF + "RevocationChecking/"
+ CONF + "ShortTermedCertificates";
-
+
private static final String SHORT_TIME_CERTS_INTERVALS_CA_XPATH =
SHORT_TIME_CERTS_INTERVALS_XPATH + "/"
+ CONF + "CA";
-
+
private static final String ENABLE_REVOCATION_CHECKING_XPATH_ =
ROOT + CONF + "SignatureVerification/"
+ CONF + "CertificateValidation/"
@@ -441,7 +442,7 @@ public class ConfigurationPartsBuilder {
/**
* Get the connection timeout to set-up a network connection
- *
+ *
* @return timeout in milliseconds [ms]
*/
public int getConnectionTimeout() {
@@ -463,7 +464,7 @@ public class ConfigurationPartsBuilder {
return defaultConnectionTimeout * 1000;
}
-
+
public int getReadTimeout() {
final String connectionTimeout = getElementValue(getConfigElem(), READ_TIMEOUT_XPATH_, "30");
@@ -1086,7 +1087,7 @@ public class ConfigurationPartsBuilder {
/**
* Build the <code>CreateSignatureEnvironmentProfile</code>s.
- *
+ *
* @return The mapping from profile ID to profile.
*/
public Map buildCreateSignatureEnvironmentProfiles() {
@@ -1100,20 +1101,20 @@ public class ConfigurationPartsBuilder {
*/
public Map buildVerifyTransformsInfoProfiles() {
Map<String, Element> profiles = loadProfiles(VERIFY_TRANSFORMS_INFO_PROFILE_XPATH, "VerifyTransformsInfoProfile");
-
+
// validate entries
- ProfileParser profileParser = new ProfileParser();
+ ProfileParser profileParser = new ProfileParser();
profiles.entrySet().forEach(el -> {
try {
profileParser.parseVerifyTransformsInfoProfile(el.getValue());
-
+
} catch (MOAApplicationException e) {
Logger.warn("TransformationProfile with Id:" + el.getKey() + " is invalid: " + e.getMessage());
- }
+ }
});
return profiles;
-
+
}
/**
@@ -1506,7 +1507,7 @@ public class ConfigurationPartsBuilder {
/**
* Returns the JDBC driver class name for the revocation archive database.
- *
+ *
* @return the JDBC driver class name for the revocation archive database, or
* <code>null</code, if the corresponding parameter is not set in the
* configuration.
@@ -1594,13 +1595,18 @@ public class ConfigurationPartsBuilder {
public boolean getAutoEEAddCertificates() {
final String autoAdd = getElementValue(getConfigElem(), AUTO_ADD_EE_CERTIFICATES_XPATH_, null);
- if (autoAdd != null) {
+ if (autoAdd != null) {
return Boolean.valueOf(autoAdd).booleanValue();
-
+
} else {
return false;
-
+
}
+ }
+
+ public boolean isStrictSignatureValueParsingEnabled() {
+ final String isActive = getElementValue(getConfigElem(), STRICT_SIGNATURE_VALUE_PARSING_XPATH_, "true");
+ return Boolean.valueOf(isActive).booleanValue();
}
@@ -1757,53 +1763,53 @@ public class ConfigurationPartsBuilder {
return map;
}
-
+
/**
* Should ETSI extension should be used for short-time certificate validation.
- *
+ *
* @return <code>true</code> if it is used
*/
public boolean isShotTimeCertEtsiExtCheck() {
final NodeIterator modIter = XPathUtils.selectNodeIterator(
getConfigElem(),
SHORT_TIME_CERTS_INTERVALS_XPATH);
-
+
Element modElem;
- if ((modElem = (Element) modIter.nextNode()) != null) {
- Boolean value = Boolean.valueOf(modElem.getAttribute("checkETSIValidityAssuredExtension"));
- Logger.debug((value ? "Enable" : "Disable") + "shortTime certificate ETSI extension");
+ if ((modElem = (Element) modIter.nextNode()) != null) {
+ Boolean value = Boolean.valueOf(modElem.getAttribute("checkETSIValidityAssuredExtension"));
+ Logger.debug((value ? "Enable" : "Disable") + "shortTime certificate ETSI extension");
return value;
-
+
}
-
- return SHORT_TIME_CERT_DEFAULT_ETSI;
+
+ return SHORT_TIME_CERT_DEFAULT_ETSI;
}
-
+
/**
* Get default shortTime certificate interval.
- *
+ *
* @return Time in minutes
*/
public int getShotTimeCertDefaultInterval() {
final NodeIterator modIter = XPathUtils.selectNodeIterator(
getConfigElem(),
SHORT_TIME_CERTS_INTERVALS_XPATH);
-
+
Element modElem;
if ((modElem = (Element) modIter.nextNode()) != null) {
String defaultString = modElem.getAttribute("defaultValidityPeriod");
Logger.debug("Set default shortTimePeriodInterval to: " + defaultString);
return Integer.valueOf(defaultString);
-
+
}
-
- return SHORT_TIME_CERT_DEFAULT_INTERVAL;
+
+ return SHORT_TIME_CERT_DEFAULT_INTERVAL;
}
-
-
+
+
/**
* Returns a map of shortTime certificate intervals.
- *
+ *
* <p>
* No revocation checks are performed during this interval.
* </p>
@@ -1824,10 +1830,10 @@ public class ConfigurationPartsBuilder {
final Integer interval = new Integer(i);
map.put(x509IssuerName, interval);
Logger.debug("Set shortTimePeriodInterval: " + interval + " for Issuer: " + x509IssuerName);
-
+
}
return map;
}
-
+
}
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java
index 85930b2..3c720a1 100644
--- a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java
+++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java
@@ -112,6 +112,9 @@ public class ConfigurationProvider {
private int connectionTimeout;
private int readTimeout;
+ /** Enable strict parsing or ASN.1 signature values */
+ private boolean strictSignatureValueParsing = true;
+
/**
* A <code>List</code> of <code>HardwareCryptoModule</code> objects for
* configuring hardware modules.
@@ -258,12 +261,12 @@ public class ConfigurationProvider {
*/
private Map crlRetentionIntervals;
-
+
private boolean useShortTimeCertificateEtisExt;
private int defaultShortTimeCertificatePeriod;
private Map<String, Integer> shortTimeCertificatePeriods;
-
-
+
+
/**
* Indicates wether external URIs are allowed or not
*/
@@ -384,13 +387,15 @@ public class ConfigurationProvider {
allKeyModules.addAll(softwareKeyModules);
keyGroups = builder.buildKeyGroups(allKeyModules);
keyGroupMappings = builder.buildKeyGroupMappings(keyGroups, ANONYMOUS_ISSUER_SERIAL);
-
+
this.connectionTimeout = builder.getConnectionTimeout();
Logger.debug("Set 'Connection-Timeout' to " + String.valueOf(this.connectionTimeout) + "[ms]");
-
+
this.readTimeout = builder.getReadTimeout();
Logger.debug("Set 'Read-Timeout' to " + String.valueOf(this.readTimeout) + "[ms]");
-
+
+ strictSignatureValueParsing = builder.isStrictSignatureValueParsingEnabled();
+
pdfAsConfiguration = builder.getPDFASConfiguration();
adesFormResults = builder.getAdesFormResult();
xadesVersion = builder.getXAdESVersion();
@@ -425,7 +430,7 @@ public class ConfigurationProvider {
shortTimeCertificatePeriods = builder.getShotTimeCertIntervals();
defaultShortTimeCertificatePeriod = builder.getShotTimeCertDefaultInterval();
useShortTimeCertificateEtisExt = builder.isShotTimeCertEtsiExtCheck();
-
+
allowExternalUris_ = builder.allowExternalUris();
if (allowExternalUris_) {
@@ -681,7 +686,7 @@ public class ConfigurationProvider {
// Entry thisEntry = (Entry) entries.next();
// System.out.println("Entry: " + thisEntry.getKey());
// System.out.println("Value: " + thisEntry.getValue());
-// }
+// }
mapping = (Map) keyGroupMappings.get(issuerAndSerial);
if (mapping != null) {
@@ -972,6 +977,19 @@ public class ConfigurationProvider {
}
/**
+ * Activates / deactivates strict parsing of ASN.1 encoded signature values.
+ *
+ * <p>
+ * <b>Default:</b> true
+ * </p>
+ *
+ * @return <code>true</code> if enabled, otherwise <code>false</code>
+ */
+ public boolean isStrictSignatureValueParsing() {
+ return strictSignatureValueParsing;
+ }
+
+ /**
* Returns whether the certificate extension Authority Info Access should be
* used during certificate path construction.
*
@@ -1008,7 +1026,7 @@ public class ConfigurationProvider {
public TSLConfiguration getTSLConfiguration() {
return tslconfiguration_;
}
-
+
public int getDefaultShortTimeCertificatePeriod() {
return defaultShortTimeCertificatePeriod;
}
@@ -1021,20 +1039,20 @@ public class ConfigurationProvider {
return shortTimeCertificatePeriods;
}
-
-
+
+
public static final String normalizeX500Names(String x500Name) {
try {
final RFC2253NameParser parser = new RFC2253NameParser(x500Name);
final Name name = parser.parse();
return name.getRFC2253String();
-
+
} catch (final RFC2253NameParserException e) {
Logger.info("X500Name: " + x500Name + " can not be normalized. Use it as it is");
return x500Name;
-
+
}
-
+
}
-
+
} \ No newline at end of file
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java
index 9ba731d..d8d99bd 100644
--- a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java
+++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java
@@ -47,6 +47,7 @@ import at.gv.egovernment.moaspss.logging.LoggingContext;
import at.gv.egovernment.moaspss.logging.LoggingContextManager;
import at.gv.egovernment.moaspss.util.Constants;
import at.gv.egovernment.moaspss.util.DOMUtils;
+import iaik.asn1.INTEGER;
import iaik.asn1.ObjectID;
import iaik.pkcs.pkcs12.PKCS12KeyStore;
import iaik.server.ConfigurationData;
@@ -61,12 +62,12 @@ import iaik.utils.RFC2253NameParser;
public class SystemInitializer {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SystemInitializer.class);
-
+
/**
* 15 min TSL reload scheduler interval.
*/
private static final long TSL_SCHEDULE_INTERVAL = 5*60*1000;
-
+
/** Interval between archive cleanups in seconds */
private static final long ARCHIVE_CLEANUP_INTERVAL = 60 * 60; // 1h
@@ -115,10 +116,10 @@ public class SystemInitializer {
RFC2253NameParser.register(
"organizationIdentifier",
new ObjectID("2.5.4.97", "organizationIdentifier", (String) null, false));
-
+
// initialize configuration
initializeMoaSigConfiguraion();
-
+
// start the archive cleanup thread
Thread archiveCleaner =
new Thread(new RevocationArchiveCleaner(ARCHIVE_CLEANUP_INTERVAL));
@@ -149,9 +150,9 @@ public class SystemInitializer {
private static void initializeMoaSigConfiguraion() {
final MessageProvider msg = MessageProvider.getInstance();
-
+
try {
-
+
Logger.info("Initialize MOA-SP/SS configuration ... ");
config = ConfigurationProvider.getInstance();
@@ -177,12 +178,17 @@ public class SystemInitializer {
iaikConfiguration = IaikConfigurator.configure(config);
runInitializer(config);
-
- // set Fallback mode in IAIK KeyStore implementation to 'true' to fix problems default behavior of JVM
+
+ // set Fallback mode in IAIK KeyStore implementation to 'true' to fix problems default behavior of JVM
PKCS12KeyStore.setUseJKSFallBack(true);
- Logger.info("Set fallback mode in: " + PKCS12KeyStore.class.getSimpleName()
+ Logger.info("Set fallback mode in: " + PKCS12KeyStore.class.getSimpleName()
+ " to :" + PKCS12KeyStore.getUseJKSFallBack());
-
+
+ INTEGER.checkForMinumumLengthEncoding(config.isStrictSignatureValueParsing());
+ Logger.info(config.isStrictSignatureValueParsing() ? "Enable"
+ : "Disable"
+ + " strict parsing of ASN.1 encoded signature values");
+
Logger.info(new LogMsg(msg.getMessage("init.01", null)));
} catch (final MOAException e) {
@@ -193,9 +199,9 @@ public class SystemInitializer {
Logger.fatal(new LogMsg(msg.getMessage("init.00", null)), e);
throw new RuntimeException(e);
- }
+ }
}
-
+
private static void loadXsdSchemaIntoXmlParser() {
// parsing/validating
try {
@@ -221,10 +227,10 @@ public class SystemInitializer {
}
} catch (final IOException e) {
Logger.warn(new LogMsg(MessageProvider.getInstance().getMessage("init.04", null)), e);
-
- }
+
+ }
}
-
+
private static void initTSLUpdateTask(TSLConfiguration tslconfig) {
final MessageProvider msg = MessageProvider.getInstance();
if (tslconfig != null) {
@@ -254,14 +260,14 @@ public class SystemInitializer {
if (start.before(now)) {
start = new Date(start.getTime() + 86400000);
}
-
+
Logger.debug(new LogMsg(msg.getMessage("config.46", new String[] { start.toString(), "" + period })));
// start TSL updater task
final Timer timer = new Timer("TSL_DB_Updater");
- timer.schedule(new TSLUpdaterTimerTask(start, period),
+ timer.schedule(new TSLUpdaterTimerTask(start, period),
new Date(now.getTime() + TSL_SCHEDULE_INTERVAL), TSL_SCHEDULE_INTERVAL);
-
+
}
}
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureVerificationInvoker.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureVerificationInvoker.java
index e18f957..1a0791b 100644
--- a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureVerificationInvoker.java
+++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureVerificationInvoker.java
@@ -343,8 +343,6 @@ public class CMSSignatureVerificationInvoker {
PDFSignatureVerificationResult cmsResult = null;
List adesResults = null;
boolean extendedVerification = false;
- final Boolean coversFullDoc = null;
- final int[] sigByteRange = null;
ExtendedCertificateCheckResult extCheckResult = null;
if (resultObject instanceof ExtendedPDFSignatureVerificationResult) {