diff options
Diffstat (limited to 'spss.server')
4 files changed, 175 insertions, 45 deletions
diff --git a/spss.server/doc/moa_spss/faqs.htm b/spss.server/doc/moa_spss/faqs.htm index 9c01f31ee..2865cd971 100644 --- a/spss.server/doc/moa_spss/faqs.htm +++ b/spss.server/doc/moa_spss/faqs.htm @@ -60,27 +60,76 @@ MOA ist eine Entwicklung des Bundesrechenzentrums BRZ in Zusammenarbeit mit A-Tr </div --> </td> -<td valign="top"> -<div id="titel">FAQs - Häufig gestellte Fragen </div> - -<div id="Administration" /> -<p id="subtitel">Konflikt zwischen JDK 1.3.1 und IAIK JCE Provider</p> -<p id="block"> -Auf Grund einer mangelhaften Implementierung in einigen Versionen des JDK 1.3.1 kann es beim Betrieb von MOA zu folgendem Problem kommen: Sun macht in der Implementierung von PKCS7.getCertificate() einen Downcast vom Interface java.security.Principal auf die eigene Implementierung, was zu einer ClassCastException führt, wenn der JCE-Provider von Sun nicht an erster Stelle in der List der Security-Provider installiert ist. MOA geht nun aber so vor, dass der JCE-Provider des IAIK an die erste Stelle installiert wird, wenn er zum Zeitpunkt der Konfiguration noch nicht installiert war. Wird dann von irgendeinem ClassLoader der jar-Verifier angeworfen, wird PKCS7.getCertificate() verwendet, und es kommt zu einer ClassCastException. -</p> -<p id="block"> -Wird MOA über die API-Schnittstelle verwendet, ist ein Workaround die manuelle Installation des IAIK-JCE-Providers nach dem Sun JCE-Provider (etwa an die letzte Stelle), bevor die MOA-Konfiguration aufgerufen wird. Bei Verwendung der Webservices ist die Möglichkeit der statischen Konfiguration der JCE-Provider mittels Angabe in der Datei $JAVA_HOME/jre/lib/security/java.security der einzige bekannte Workaround. Hierzu müssen die Einträge -<pre> + <td valign="top"> + <div id="titel">FAQs - Häufig gestellte Fragen </div> + <div id="Administration" /> + <p id="subtitel">Frage 1</p> + <p id="block"><b>Q: </b>Beim Starten von MOA SPSS tritt folgende Exception auf: + <tt>java.lang.ClassCastException: iaik.asn1.structures.Name</tt>. + Was kann der Fehler sein?</p> + <p id="block"> <b>A:</b> Auf Grund einer mangelhaften Implementierung + in einigen Versionen des JDK 1.3.1 kann es beim Betrieb von MOA zu + folgendem Problem kommen: Sun macht in der Implementierung von PKCS7.getCertificate() + einen Downcast vom Interface java.security.Principal auf die eigene + Implementierung, was zu einer ClassCastException führt, wenn der JCE-Provider + von Sun nicht an erster Stelle in der List der Security-Provider installiert + ist. MOA geht nun aber so vor, dass der JCE-Provider des IAIK an die + erste Stelle installiert wird, wenn er zum Zeitpunkt der Konfiguration + noch nicht installiert war. Wird dann von irgendeinem ClassLoader + der jar-Verifier benützt, wird PKCS7.getCertificate() verwendet, + und es kommt zu einer ClassCastException. </p> + <p id="block"> Wird MOA über die API-Schnittstelle verwendet, ist ein + Workaround die manuelle Installation des IAIK-JCE-Providers nach dem + Sun JCE-Provider (etwa an die letzte Stelle), bevor die MOA-Konfiguration + aufgerufen wird. Bei Verwendung der Webservices ist die Möglichkeit + der statischen Konfiguration der JCE-Provider mittels Angabe in der + Datei $JAVA_HOME/jre/lib/security/java.security der einzige bekannte + Workaround. Hierzu müssen die Einträge + <pre> security.provider.1=sun.security.provider.Sun security.provider.2=com.sun.rsajca.Provider </pre> -durch folgenden Eintrag ergänzt werden: -<pre> + durch folgenden Eintrag ergänzt werden: + <pre> security.provider.3=iaik.security.provider.IAIK </pre> -</p> + <p></p> + <hr> + <p id="subtitel">Frage 2</p> + <p id="block"><b>Q: </b>Ich möchte gerne die CRL-Archivierung von MOA verwenden, + möchte aber eine andere als die in der Konfiguration erwähnte + postgreSQL-Datenbank verwenden. Geht das?</p> + <p id="block"> <b>A:</b> Ja, das ist möglich. Wenn Sie eine mySQL-Datenbank + verwenden möchten, sind folgende Maßnahmen zu treffen:</p> + </div> + <ul> + <div id="block"><li> + <a href="http://www.mysql.com/downloads/api-jdbc.html" target="_blank">Laden</a> + Sie den mySQL-JDBC-Connector herunter und fügen Sie das im + Download enthaltene jar-File <tt>mysql-connector-java-3.x.x-stable-bin.jar</tt> + zum Klassenpfad für MOA SPSS hinzu. + </li> + <li>Geben Sie im MOA-Konfigurationsfile mit Hilfe des generischen Konfigurationsparameters + <tt><a href="sp-admin_2.htm#DataBaseArchiveParameter.JDBCUrl">DataBaseArchiveParameter.JDBCUrl</a></tt> + eine gültige JDBC-URL zu Ihrer mySQL-Datenbank angeben. Hinweise + zum Format dieser URL für mySQL finden Sie <a href="http://www.mysql.com/documentation/connector-j/index.html" target="_blank">hier</a>. + </li></div> + </ul> + <p id="block">Wenn Sie eine andere Datenbank verwenden möchten, beispielsweise + <a href="http://otn.oracle.com/software/tech/java/sqlj_jdbc/content.html" target="_blank">Oracle</a>, + gehen Sie sinngemäß wie oben vor und setzen zusätzlich + noch folgenden Schritt:</p> + <ul> + <li> + <div id="block" />Geben Sie im MOA-Konfigurationsfile mit + Hilfe des generischen Konfigurationsparameters <tt><a href="sp-admin_2.htm#DataBaseArchiveParameter.JDBCDriverClass">DataBaseArchiveParameter.JDBCDriverClass</a></tt> + den vollständig qualifizierten Klassennamen des JDBC-Treibers + an, der die Verbindung zu Ihrer Datenbank herstellt.</div> + </li> + </ul> -</td></tr></table> + </td> + </tr></table> diff --git a/spss.server/doc/moa_spss/sp-admin_2.htm b/spss.server/doc/moa_spss/sp-admin_2.htm index 147a8ba9c..112d7dd13 100644 --- a/spss.server/doc/moa_spss/sp-admin_2.htm +++ b/spss.server/doc/moa_spss/sp-admin_2.htm @@ -230,26 +230,59 @@ Default-Wert: <tt>false</tt> </td></tr> </table> -<table border="0" cellspacing="3" cellpadding="2"> -<tr id="DataBaseArchiveParameter.JDBCUrl"><th align="left">name: DataBaseArchiveParameter.JDBCUrl</th></tr> -<tr><td id="info"> -Gibt eine JDBC-URL zur Datenbank an, in der Revozierungsinformation archiviert werden soll. Wird dieser -Parameter nicht gesetzt, dann wertet MOA den Parameter <tt>archiveRevocationInfo</tt> nicht aus der Konfigurationsdatei -aus sondern setzt den Wert automatisch auf <tt>false</tt>. -<br /> -Der genaue Aufbau der JDBC-URL ist abhängig von der verwendeten Datenbank. Im Fall von PostgreSQL kann folgende -URL verwendet werden: <tt>jdbc:postgresql://host/moadb?user=moauser&amp;password=moapassword</tt> wobei -<tt>host, moadb, moauser</tt> und <tt>moapassword</tt> an die tatsächlich verwendete Datenbank angepasst werden muss.<br /> -Die Verwendung von <tt>"&amp"</tt> ist erforderlich, da <tt>"&"</tt> einen Fehler bei der Validierung der -Konfigurationsdatei verursacht. -<br /> -Die Archivdaten werden nur MOA-SPSS-intern benötigt und das Format ist daher für den Betrieb des Servers nicht relevant. -<hr /> -<b>value: </b><br />Gültige Werte: String -</td></tr> -</table> - -</p> + <table border="0" cellspacing="3" cellpadding="2"> + <tr id="DataBaseArchiveParameter.JDBCUrl"> + <th align="left">name: DataBaseArchiveParameter.JDBCUrl</th> + </tr> + <tr> + <td id="info"> Gibt eine JDBC-URL zur Datenbank an, in der + Revozierungsinformation archiviert werden soll. Wird dieser + Parameter nicht gesetzt, dann wertet MOA den Parameter <tt>archiveRevocationInfo</tt> + nicht aus der Konfigurationsdatei aus sondern setzt den + Wert automatisch auf <tt>false</tt>. <br /> + Der genaue Aufbau der JDBC-URL ist abhängig von der verwendeten + Datenbank. Im Fall von PostgreSQL kann folgende URL verwendet + werden: <tt>jdbc:postgresql://host/moadb?user=moauser&amp;password=moapassword</tt> + wobei <tt>host, moadb, moauser</tt> und <tt>moapassword</tt> + an die tatsächlich verwendete Datenbank angepasst werden + muss.<br /> + Die Verwendung von <tt>"&amp"</tt> ist erforderlich, + da <tt>"&"</tt> einen Fehler bei der Validierung der + Konfigurationsdatei verursacht. <br /> + Die Archivdaten werden nur MOA-SPSS-intern benötigt und + das Format ist daher für den Betrieb des Servers nicht relevant. + <hr /> + <b>value: </b><br /> + Gültige Werte: String </td> + </tr> + </table> + <table border="0" cellspacing="3" cellpadding="2"> + <tr id="DataBaseArchiveParameter.JDBCDriverClass"> + <th align="left">name: DataBaseArchiveParameter.JDBCDriverClass</th> + </tr> + <tr> + <td id="info"> + <p>Dieser Parameter kann verwendet werden, um MOA SPSS den + Klassennamen des JDBC-Datenbanktreibers bekannt zu geben, + der zur Ansprache der für die CRL-Archivierung zu + verwendenden Datenbank benützt werden soll. Er muss + den vollständig qualifizierten Klassennamen der JDBC-Treiberklasse + enthalten. + </p> + <p>Der Parameter wird nur dann ausgewertet, wenn der generische + Konfigurationsparameter <tt>archiveRevocationInfo</tt> + auf den Wert <tt>true</tt> gesetzt ist. + <p>Hinweis: Wird im generischen Konfigurationsparameter + <tt>DataBaseArchiveParameter.JDBCUrl</tt> entweder eine + postgreSQL- oder eine mySQL-Datenbank referenziert, braucht + dieser Paramter nicht angegeben zu werden; in diesen Standardfällen + erfolgt eine automatische Zuordnung zur passenden JDBC-Treiberklasse. + <hr /> + <b>value: </b><br /> + Gültige Werte: vollständig qualifizierter Java-Klassenname</td> + </tr> + </table> + <p></p> <div id="HardwareKeyModule" /> <p id="block"> @@ -278,7 +311,7 @@ interpretiert.</td> <td id="info">der PIN für die Aktivierung des privaten Schlüssels</td> </tr> </table> -</p> +<p></p> <div id="SoftwareKeyModule" /> <p id="block"> @@ -301,7 +334,7 @@ Pfadnamen relativ zur MOA SP/SS Konfigurationsdatei.</td> <td id="info">das Passwort zur Aktivierung des privaten Schlüssels in der PKCS#12-Datei</td> </tr> </table> -</p> +<p></p> <div id="KeyGroup" /> <p id="block"> @@ -345,7 +378,7 @@ INFO | 10 12:56:43,023 | main | <li>Für jeden verfügbaren Schlüssel werden die Inhalte der Elemente Key/KeyModuleID, Key/KeyCertIssuerSerial/X509IssuerName und Key/KeyCertIssuerSerial/X509SerialNumber dem Log-File entnommen und in die Konfigurationsdatei eingetragen</li> <li>Nach einem neuerlichen Start von MOA SP/SS stehen die Key-Definitionen zur Verfügung</li> </ol> -</p> +<p></p> <p id="block">Sind die zu den zu konfigurierenden Schlüsseln zugehörigen Zertifikate bekannt, kann alternativ die Konfiguration in einem Schritt erfolgen, indem die benötigten Informationen mit dem Skript <tt>certtool -info <certfilename></tt> aus dem Zertifikat gelesen werden. @@ -400,7 +433,7 @@ Gültige Werte:<br /> <tt>unspecified, keyCompromise, cACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold, removeFromCRL, privilegeWithdrawn, aACompromise</tt></li> </ul> -</p> +<p></p> <div id="Create" /> <p id="block"> @@ -433,7 +466,7 @@ Die folgende Tabelle bezeichnet jene Elemente, die in den Dateien als Dokumentel </table> <br /><br /> -</p> +<p></p> <div id="TrustProfile" /> <p id="block"> @@ -450,9 +483,9 @@ TrustProfile enthält zwei Attribute: (nur das Schema file wird unterstützt). Alle für diese TrustProfileID vertrauenswürdigen Zertifikate werden in diesem Verzeichnis gespeichert.</li> </ul> -</p> +<p></p> -</td></tr></table> +</div></div></div></div></div></div></div></div></div></div></div></div></div></td></tr></table> <br /><br /> @@ -532,5 +565,5 @@ wird die ursprüngliche Konfiguration beibehalten. </div> -</body> +</div></div></body> </html>
\ No newline at end of file diff --git a/spss.server/src/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java b/spss.server/src/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java index fbae33b72..c3ba9fe23 100644 --- a/spss.server/src/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java +++ b/spss.server/src/at/gv/egovernment/moa/spss/server/config/ConfigurationProvider.java @@ -76,9 +76,16 @@ public class ConfigurationProvider { * The name of the generic configuration property giving the database URL of * the CRL archive. */ - public static final String DATABASE_ARCHIVE_PARAMETER_PROPERTY = + public static final String DATABASE_ARCHIVE_PARAMETER_URL_PROPERTY = "DataBaseArchiveParameter.JDBCUrl"; + /** + * The name of the generic configuration property giving the JDBC driver + * class name for accessing the database used for the the CRL archive. + */ + public static final String DATABASE_ARCHIVE_PARAMETER_DRIVERCLASS_PROPERTY = + "DataBaseArchiveParameter.JDBCDriverClass"; + /** The name of the generic configuration property determining whether * to check the revocation status of signer certificates. */ public static final String REVOCATION_CHECKING_PROPERTY = "checkRevocation"; diff --git a/spss.server/src/at/gv/egovernment/moa/spss/server/iaik/config/ArchiveConfigurationImpl.java b/spss.server/src/at/gv/egovernment/moa/spss/server/iaik/config/ArchiveConfigurationImpl.java index 22d798bc3..daff07bd2 100644 --- a/spss.server/src/at/gv/egovernment/moa/spss/server/iaik/config/ArchiveConfigurationImpl.java +++ b/spss.server/src/at/gv/egovernment/moa/spss/server/iaik/config/ArchiveConfigurationImpl.java @@ -4,6 +4,10 @@ import iaik.pki.store.revocation.archive.ArchiveConfiguration; import iaik.pki.store.revocation.archive.ArchiveParameter; import iaik.pki.store.revocation.archive.ArchiveTypes; +import java.sql.Driver; +import java.sql.DriverManager; +import java.util.Enumeration; + import at.gv.egovernment.moa.spss.server.config.ConfigurationProvider; /** @@ -30,11 +34,48 @@ public class ArchiveConfigurationImpl public ArchiveConfigurationImpl(ConfigurationProvider config) { String jdbcUrl = config.getGenericConfiguration( - ConfigurationProvider.DATABASE_ARCHIVE_PARAMETER_PROPERTY); + ConfigurationProvider.DATABASE_ARCHIVE_PARAMETER_URL_PROPERTY); if (jdbcUrl != null) { this.archiveParameters = new DataBaseArchiveParameterImpl(jdbcUrl); } + + // Register JDBC driver class specified in generic configuration parameters + String jdbcDriverClass = config.getGenericConfiguration( + ConfigurationProvider.DATABASE_ARCHIVE_PARAMETER_DRIVERCLASS_PROPERTY); + if (jdbcDriverClass != null) + { + try + { + Class.forName(jdbcDriverClass); + } + catch (ClassNotFoundException e) + { + // TODO 20030709 GK Improve exception handling + throw new RuntimeException("JDBC driver class \"" + jdbcDriverClass + " could not be found."); + } + + Enumeration regDrivers = DriverManager.getDrivers(); + boolean isRegistered = false; + while (regDrivers.hasMoreElements()) + { + Object currentDriver = regDrivers.nextElement(); + if (jdbcDriverClass.equals(currentDriver.getClass().getName())) isRegistered = true; + } + if (!isRegistered) + { + // Workaround for a driver which does not register itselve at invocation of Class.forName(drvname) + try + { + DriverManager.registerDriver((Driver)Class.forName(jdbcDriverClass).newInstance()); + } + catch (Exception e) + { + // TODO 20030709 GK Improve exception handling + throw new RuntimeException("Registering JDBC driver \"" + jdbcDriverClass + " failed."); + } + } + } } /** |