From 31cc3b64155e46efcd2184d86d333c465d09e67d Mon Sep 17 00:00:00 2001 From: kstranacher_eGovL Date: Wed, 18 Jul 2012 09:17:08 +0000 Subject: Update configuration and parameter check: TrustedTemplateURLs git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@1287 d688527b-c9ab-4aba-bd8d-4036d912da1d --- .../moa/id/auth/AuthenticationServer.java | 6 +- .../moa/id/auth/servlet/GetForeignIDServlet.java | 2 +- .../moa/id/config/ConfigurationBuilder.java | 21 ++ .../id/config/auth/AuthConfigurationProvider.java | 13 ++ .../moa/id/util/ParamValidatorUtils.java | 214 ++++++--------------- 5 files changed, 97 insertions(+), 159 deletions(-) (limited to 'id/server/idserverlib/src/main/java') diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationServer.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationServer.java index a57ab5262..2964f8a88 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationServer.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationServer.java @@ -570,16 +570,16 @@ public class AuthenticationServer implements MOAIDAuthConstants { int b = xmlInfoboxReadResponse.indexOf(se); if (b != -1) { // no identity link found Logger - .info("Es konnte keine Personenbindung auf der Karte gefunden werden. Versuche Anmeldung als ausl�ndische eID."); + .info("Es konnte keine Personenbindung auf der Karte gefunden werden. Versuche Anmeldung als auslaendische eID."); return null; } - // spezifikationsgem��er (SL1.2) Errorcode + // spezifikationsgemaess (SL1.2) Errorcode se = "ErrorCode>4002"; // b = xmlInfoboxReadResponse.contains(se); b = xmlInfoboxReadResponse.indexOf(se); if (b != -1) { // Unbekannter Infoboxbezeichner Logger - .info("Unbekannter Infoboxbezeichner. Versuche Anmeldung als ausl�ndische eID."); + .info("Unbekannter Infoboxbezeichner. Versuche Anmeldung als auslaendische eID."); return null; } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/GetForeignIDServlet.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/GetForeignIDServlet.java index bf7a0f714..6516e64b7 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/GetForeignIDServlet.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/GetForeignIDServlet.java @@ -210,7 +210,7 @@ public class GetForeignIDServlet extends AuthServlet { /** - * Builds the szrgw:GetIdentityLinkRequest f�r the SZR-GW + * Builds the szrgw:GetIdentityLinkRequest fuer the SZR-GW * @param givenname * @param familyname * @param birthday diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConfigurationBuilder.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConfigurationBuilder.java index 13e7cb0f1..839de48bf 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConfigurationBuilder.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConfigurationBuilder.java @@ -210,6 +210,10 @@ public class ConfigurationBuilder { /** an XPATH-Expression */ protected static final String TRUSTED_BKUS = ROOT + CONF + "TrustedBKUs/" + CONF + "BKUURL"; + + protected static final String TRUSTED_TEMPLATEURLS = + ROOT + CONF + "TrustedTemplateURLs/" + CONF + "TemplateURL"; + /** an XPATH-Expression */ protected static final String CHAINING_MODES_XPATH = @@ -500,6 +504,23 @@ public class ConfigurationBuilder { return trustedBKUs; } + +public List getTrustedTemplateURLs() { + + List trustedTemplateURLs = new ArrayList(); + + NodeIterator bkuIter = XPathUtils.selectNodeIterator(configElem_, TRUSTED_TEMPLATEURLS); + + Element vtElem; + + while ((vtElem = (Element) bkuIter.nextNode()) != null) { + String bkuURL = DOMUtils.getText(vtElem); + trustedTemplateURLs.add(bkuURL); + } + + return trustedTemplateURLs; + + } /** * Returns a list containing all X509 Subject Names diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigurationProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigurationProvider.java index b6ffb0c59..b86b2ec68 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigurationProvider.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigurationProvider.java @@ -187,6 +187,11 @@ public class AuthConfigurationProvider extends ConfigurationProvider { */ private List trustedBKUs; + /** + * Parameter for trusted Template URLs + */ + private List trustedTemplateURLs; + /** * Holds general information for STORK (e.g. C-PEPS connection parameter, SAML signing parameters, etc.) */ @@ -307,6 +312,7 @@ public class AuthConfigurationProvider extends ConfigurationProvider { trustedCACertificates = builder.getTrustedCACertificates(); trustedCACertificates = FileUtils.makeAbsoluteURL(trustedCACertificates, rootConfigFileDir); trustedBKUs = builder.getTrustedBKUs(); + trustedTemplateURLs = builder.getTrustedTemplateURLs(); storkConfig = new STORKConfig(builder.buildSTORKSignatureCreationParameter(),builder.buildSTORKSignatureVerificationParameter(), builder.buildSTORKcPEPSMap()); } catch (Throwable t) { @@ -466,6 +472,13 @@ public class AuthConfigurationProvider extends ConfigurationProvider { return this.trustedBKUs; } + /** + * Returns the trustedTemplateURLs. + * @return List + */ + public List getTrustedTemplateURLs() { + return this.trustedTemplateURLs; + } /** * Returns the bKUConnectionParameter. diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/util/ParamValidatorUtils.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/util/ParamValidatorUtils.java index 0862371dd..bd79f88b7 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/util/ParamValidatorUtils.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/util/ParamValidatorUtils.java @@ -28,6 +28,7 @@ import java.io.IOException; import java.io.StringReader; import java.net.MalformedURLException; import java.net.URL; +import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -55,7 +56,7 @@ public class ParamValidatorUtils { */ public static boolean isValidTarget(String target) { - Logger.debug("�berpr�fe Parameter Target"); + Logger.debug("Ueberpruefe Parameter Target"); // if non parameter is given return true if (StringUtils.isEmpty(target)) { @@ -68,11 +69,11 @@ public class ParamValidatorUtils { Matcher matcher = pattern.matcher(target); boolean b = matcher.matches(); if (b) { - Logger.debug("Parameter Target erfolgreich �berpr�ft"); + Logger.debug("Parameter Target erfolgreich ueberprueft"); return true; } else { - Logger.error("Fehler �berpr�fung Parameter Target. Target entspricht nicht den Kriterien (nur Zeichen a-z, A-Z und -, sowie 1-5 Zeichen lang)"); + Logger.error("Fehler Ueberpruefung Parameter Target. Target entspricht nicht den Kriterien (nur Zeichen a-z, A-Z und -, sowie 1-5 Zeichen lang)"); return false; } @@ -85,7 +86,7 @@ public class ParamValidatorUtils { */ public static boolean isValidCCC(String ccc) { - Logger.debug("�berpr�fe Parameter CCC"); + Logger.debug("Ueberpruefe Parameter CCC"); // if non parameter is given return true if (StringUtils.isEmpty(ccc)) { @@ -98,11 +99,11 @@ public class ParamValidatorUtils { Matcher matcher = pattern.matcher(ccc); boolean b = matcher.matches(); if (b) { - Logger.debug("Parameter CCC erfolgreich �berpr�ft"); + Logger.debug("Parameter CCC erfolgreich ueberprueft"); return true; } else { - Logger.error("Fehler �berpr�fung Parameter CCC. CCC entspricht nicht den Kriterien (nur Zeichen a-z, A-Z, sowie 2 Zeichen lang)"); + Logger.error("Fehler Ueberpruefung Parameter CCC. CCC entspricht nicht den Kriterien (nur Zeichen a-z, A-Z, sowie 2 Zeichen lang)"); return false; } @@ -115,7 +116,7 @@ public class ParamValidatorUtils { */ public static boolean isValidSourceID(String sourceID) { - Logger.debug("�berpr�fe Parameter sourceID"); + Logger.debug("Ueberpruefe Parameter sourceID"); // if non parameter is given return true if (StringUtils.isEmpty(sourceID)) { @@ -128,11 +129,11 @@ public class ParamValidatorUtils { Matcher matcher = pattern.matcher(sourceID); boolean b = matcher.matches(); if (b) { - Logger.debug("Parameter sourceID erfolgreich �berpr�ft"); + Logger.debug("Parameter sourceID erfolgreich ueberprueft"); return true; } else { - Logger.error("Fehler �berpr�fung Parameter sourceID. SourceID entspricht nicht den Kriterien (nur Zeichen a-z, A-Z, - und _, sowie 1-20 Zeichen lang)"); + Logger.error("Fehler Ueberpruefung Parameter sourceID. SourceID entspricht nicht den Kriterien (nur Zeichen a-z, A-Z, - und _, sowie 1-20 Zeichen lang)"); return false; } @@ -145,7 +146,7 @@ public class ParamValidatorUtils { */ public static boolean isValidUseMandate(String usemandate) { - Logger.debug("�berpr�fe Parameter useMandate"); + Logger.debug("Ueberpruefe Parameter useMandate"); // if non parameter is given return true if (StringUtils.isEmpty(usemandate)) { @@ -155,11 +156,11 @@ public class ParamValidatorUtils { if (usemandate.compareToIgnoreCase("true") == 0 || usemandate.compareToIgnoreCase("false") == 0) { - Logger.debug("Parameter useMandate erfolgreich �berpr�ft"); + Logger.debug("Parameter useMandate erfolgreich ueberprueft"); return true; } else { - Logger.error("Fehler �berpr�fung Parameter useMandate. useMandate ist weder 'true' noch 'false')"); + Logger.error("Fehler Ueberpruefung Parameter useMandate. useMandate ist weder 'true' noch 'false')"); return false; } @@ -175,7 +176,7 @@ public class ParamValidatorUtils { * @return */ public static boolean isValidBKUURI(String bkuURI) { - Logger.debug("�berpr�fe Parameter bkuURI"); + Logger.debug("Ueberpruefe Parameter bkuURI"); // if non parameter is given return true if (StringUtils.isEmpty(bkuURI)) { @@ -194,20 +195,20 @@ public class ParamValidatorUtils { bkuURI.compareToIgnoreCase("http://localhost:3495/http-security-layer-request") == 0 || bkuURI.compareToIgnoreCase("http://127.0.0.1:3495/http-security-layer-request") == 0 || bkuURI.compareToIgnoreCase("https://127.0.0.1:3496/https-security-layer-request") == 0) { - Logger.debug("Parameter bkuURI erfolgreich �berpr�ft"); + Logger.debug("Parameter bkuURI erfolgreich ueberprueft"); return true; } else { - Logger.debug("Parameter bkuURI ist keine lokale BKU. �berpr�fe Liste der vertrauensw�rdigen BKUs."); + Logger.debug("Parameter bkuURI ist keine lokale BKU. Ueberpruefe Liste der vertrauenswuerdigen BKUs."); AuthConfigurationProvider authConf = AuthConfigurationProvider.getInstance(); List trustedBKUs = authConf.getTrustedBKUs(); boolean b = trustedBKUs.contains(bkuURI); if (b) { - Logger.debug("Parameter bkuURI erfolgreich �berpr�ft"); + Logger.debug("Parameter bkuURI erfolgreich ueberprueft"); return true; } else { - Logger.error("Fehler �berpr�fung Parameter bkuURI. bkuURI ist nicht auf Liste der vertrauensw�rdigen BKUs (Konfigurationselement: MOA-IDConfiguration/TrustedBKUs)"); + Logger.error("Fehler Ueberpruefung Parameter bkuURI. bkuURI ist nicht auf Liste der vertrauenswuerdigen BKUs (Konfigurationselement: MOA-IDConfiguration/TrustedBKUs)"); return false; } } @@ -215,126 +216,20 @@ public class ParamValidatorUtils { } else { - Logger.error("Fehler �berpr�fung Parameter bkuURI. bkuURI beginnt nicht mit http or https"); + Logger.error("Fehler Ueberpruefung Parameter bkuURI. bkuURI beginnt nicht mit http or https"); return false; } } catch (MalformedURLException e) { - Logger.error("Fehler �berpr�fung Parameter bkuURI", e); + Logger.error("Fehler Ueberpruefung Parameter bkuURI", e); return false; } catch (ConfigurationException e) { - Logger.error("Fehler �berpr�fung Parameter bkuURI", e); + Logger.error("Fehler Ueberpruefung Parameter bkuURI", e); return false; } } -// private static boolean testBKUConnection(URL url) { -// -// // make NullOperationRequest -// //String request = ""; -// String request = ""; -// -// HttpURLConnection connection; -// if (url != null) { -// try { -// if (url.toExternalForm().startsWith("https")) { -// connection = (HttpsURLConnection)url.openConnection(); -// } -// else { -// connection = (HttpURLConnection)url.openConnection(); -// } -// -// connection.setRequestMethod("POST"); -// connection.setDoOutput(true); -// -// connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); -// -// String toSend = URLEncoder.encode(request, "UTF-8"); -// toSend = "XMLRequest=" + toSend; -// connection.setRequestProperty("Content-Length", String.valueOf(toSend.getBytes().length)); -// -// Logger.debug("Send NullOperationRequest to BKU."); -// -// OutputStream out = connection.getOutputStream(); -// out.write(toSend.getBytes()); -// -// // get response -// connection.connect(); -// int responseCode = connection.getResponseCode(); -// -// if (responseCode != 200) { -// InputStream is = connection.getErrorStream(); -// int ch; -// String ret = ""; -// while ((ch = is.read()) != -1) -// ret += (char)ch; -// -// is.close(); -// -// System.out.println("ret: " + ret); -// -// Logger.error("Fehler �berpr�fung Parameter bkuURI. Antwortcode von BKU ist nicht 200."); -// return false; -// } -// -// DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); -// factory.setNamespaceAware(true); -// DocumentBuilder builder = factory.newDocumentBuilder(); -// -// //Document doc = builder.parse(connection.getInputStream()); -// -// System.out.println(convertStreamToString(connection.getInputStream())); -// -//// NodeList l = doc.getElementsByTagNameNS(Constants.SL12_NS_URI, "ErrorResponse"); -//// if (l.getLength() != 0) { -//// Logger.error("Fehler �berpr�fung Parameter bkuURI. ErrorResponse von BKU empfangen."); -//// return false; -//// } -// -// Logger.debug("Parameter Template bkuURI erfolgreich �berpr�ft"); -// return true; -// -//// } catch (SAXException e) { -//// Logger.error("Fehler �berpr�fung Parameter bkuURI.", e); -//// return false; -// } catch (IOException e) { -// Logger.error("Fehler �berpr�fung Parameter bkuURI.", e); -// return false; -// } catch (ParserConfigurationException e) { -// Logger.error("Fehler �berpr�fung Parameter bkuURI.", e); -// return false; -// } -// } -// else { -// Logger.error("Fehler �berpr�fung Parameter bkuURI. bkuURI ist null."); -// return false; -// } -// -// -// } - -// public static String convertStreamToString(InputStream is) { -// if (is != null) { -// Writer writer = new StringWriter(); -// -// char[] buffer = new char[1024]; -// try { -// Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); -// int n; -// while ((n = reader.read(buffer)) != -1) { -// writer.write(buffer, 0, n); -// } -// } catch (IOException e) { -// e.printStackTrace(); -// } -// -// return writer.toString(); -// } -// else { -// return ""; -// } -// } /** * Checks if the given template is valid @@ -344,7 +239,7 @@ public class ParamValidatorUtils { */ public static boolean isValidTemplate(HttpServletRequest req, String template) { - Logger.debug("�berpr�fe Parameter Template bzw. bkuSelectionTemplateURL"); + Logger.debug("Ueberpruefe Parameter Template bzw. bkuSelectionTemplateURL"); // if non parameter is given return true if (StringUtils.isEmpty(template)) { @@ -365,25 +260,39 @@ public class ParamValidatorUtils { if (template.startsWith(httpName) || template.startsWith(httpsName)) { new URL(template); - Logger.debug("Parameter Template bzw. bkuSelectionTemplateURL erfolgreich �berpr�ft"); + Logger.debug("Parameter Template bzw. bkuSelectionTemplateURL erfolgreich ueberprueft"); return true; } - else { - Logger.error("Fehler �berpr�fung Parameter Template bzw. bkuSelectionTemplateURL. Parameter liegt nicht am gleichen Server wie die MOA-Instanz (" + req.getServerName() + ")"); - return false; + else { + //check against configured trustet template urls + AuthConfigurationProvider authConf = AuthConfigurationProvider.getInstance(); + List trustedTemplateURLs = authConf.getTrustedTemplateURLs(); + boolean b = trustedTemplateURLs.contains(template); + if (b) { + Logger.debug("Parameter Template erfolgreich ueberprueft"); + return true; + } + else { + Logger.error("Fehler Ueberpruefung Parameter Template bzw. bkuSelectionTemplateURL. Parameter liegt nicht am gleichen Server wie die MOA-Instanz (" + req.getServerName() + ") bzw. ist nicht auf Liste der vertrauenswuerdigen Template URLs (Konfigurationselement: MOA-IDConfiguration/TrustedTemplateURLs)"); + return false; + } + } } else { - Logger.error("Fehler �berpr�fung Parameter Template bzw. bkuSelectionTemplateURL. Paramter beginnt nicht mit http oder https."); + Logger.error("Fehler Ueberpruefung Parameter Template bzw. bkuSelectionTemplateURL. Paramter beginnt nicht mit http oder https."); return false; } } catch (MalformedURLException e) { - Logger.error("Fehler �berpr�fung Parameter Template bzw. bkuSelectionTemplateURL.", e); + Logger.error("Fehler Ueberpruefung Parameter Template bzw. bkuSelectionTemplateURL.", e); return false; - } + } catch (ConfigurationException e) { + Logger.error("Fehler Ueberpruefung Parameter Template bzw. bkuSelectionTemplateURL.", e); + return false; + } } /** @@ -392,7 +301,7 @@ public class ParamValidatorUtils { * @return */ public static boolean isValidSessionID(String sessionID) { - Logger.debug("�berpr�fe Parameter MOASessionId"); + Logger.debug("Ueberpruefe Parameter MOASessionId"); // if non parameter is given return true if (StringUtils.isEmpty(sessionID)) { @@ -405,18 +314,13 @@ public class ParamValidatorUtils { Matcher matcher = pattern.matcher(sessionID); boolean b = matcher.matches(); if (b) { - Logger.debug("Parameter MOASessionId erfolgreich �berpr�ft"); + Logger.debug("Parameter MOASessionId erfolgreich ueberprueft"); return true; } else { - Logger.error("Fehler �berpr�fung Parameter MOASessionId. MOASessionId entspricht nicht den Kriterien (nur Zeichen 0-9 und -)"); + Logger.error("Fehler Ueberpruefung Parameter MOASessionId. MOASessionId entspricht nicht den Kriterien (nur Zeichen 0-9 und -)"); return false; } - - - - - } /** @@ -425,7 +329,7 @@ public class ParamValidatorUtils { * @return */ public static boolean isValidOA(String oa) { - Logger.debug("�berpr�fe Parameter oa"); + Logger.debug("Ueberpruefe Parameter oa"); // if non parameter is given return true if (StringUtils.isEmpty(oa)) { Logger.debug("Parameter oa ist null"); @@ -438,16 +342,16 @@ public class ParamValidatorUtils { // check if template url starts with http or https if (oa.startsWith("http") || oa.startsWith("https")) { new URL(oa); - Logger.debug("Parameter oa erfolgreich �berpr�ft"); + Logger.debug("Parameter oa erfolgreich ueberprueft"); return true; } else { - Logger.error("Fehler �berpr�fung Parameter oa. oa beginnt nicht mit http or https"); + Logger.error("Fehler Ueberpruefung Parameter oa. oa beginnt nicht mit http or https"); return false; } } catch (MalformedURLException e) { - Logger.error("Fehler �berpr�fung Parameter oa", e); + Logger.error("Fehler Ueberpruefung Parameter oa", e); return false; } @@ -460,7 +364,7 @@ public class ParamValidatorUtils { */ public static boolean isValidSignUrl(String signurl) { - Logger.debug("�berpr�fe Parameter signurl"); + Logger.debug("Ueberpruefe Parameter signurl"); // if non parameter is given return true if (StringUtils.isEmpty(signurl)) { @@ -474,16 +378,16 @@ public class ParamValidatorUtils { // check if signurl starts with http or https if (signurl.startsWith("http") || signurl.startsWith("https")) { new URL(signurl); - Logger.debug("Parameter signurl erfolgreich �berpr�ft"); + Logger.debug("Parameter signurl erfolgreich ueberprueft"); return true; } else { - Logger.error("Fehler �berpr�fung Parameter signurl. signurl beginnt nicht mit http or https"); + Logger.error("Fehler Ueberpruefung Parameter signurl. signurl beginnt nicht mit http or https"); return false; } } catch (MalformedURLException e) { - Logger.error("Fehler �berpr�fung Parameter signurl", e); + Logger.error("Fehler Ueberpruefung Parameter signurl", e); return false; } @@ -542,24 +446,24 @@ public class ParamValidatorUtils { if (StringUtils.isEmpty(document)) return false; - Logger.debug("Überprüfe Parameter XMLDocument"); + Logger.debug("Ueberpruefe Parameter XMLDocument"); try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputSource is = new InputSource(new StringReader(document)); builder.parse(is); - Logger.debug("Parameter XMLDocument erfolgreich überprüft"); + Logger.debug("Parameter XMLDocument erfolgreich ueberprueft"); return true; } catch (ParserConfigurationException e) { - Logger.error("Fehler Überprüfung Parameter XMLDocument", e); + Logger.error("Fehler Ueberpruefung Parameter XMLDocument", e); return false; } catch (SAXException e) { - Logger.error("Fehler Überprüfung Parameter XMLDocument", e); + Logger.error("Fehler Ueberpruefung Parameter XMLDocument", e); return false; } catch (IOException e) { - Logger.error("Fehler Überprüfung Parameter XMLDocument", e); + Logger.error("Fehler Ueberpruefung Parameter XMLDocument", e); return false; } -- cgit v1.2.3