From a042ee746381ba0765ed5df716fb1e5f79d4df86 Mon Sep 17 00:00:00 2001 From: gregor Date: Mon, 14 Jul 2003 11:42:29 +0000 Subject: Bug 7 fixed. git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@11 d688527b-c9ab-4aba-bd8d-4036d912da1d --- spss.server/doc/moa_spss/faqs.htm | 79 +++++++++++++++---- spss.server/doc/moa_spss/sp-admin_2.htm | 89 +++++++++++++++------- .../spss/server/config/ConfigurationProvider.java | 9 ++- .../iaik/config/ArchiveConfigurationImpl.java | 43 ++++++++++- 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 - -
FAQs - Häufig gestellte Fragen
- -
-

Konflikt zwischen JDK 1.3.1 und IAIK JCE Provider

-

-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. -

-

-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 -

+       
+        
FAQs - Häufig gestellte Fragen
+
+

Frage 1

+

Q: Beim Starten von MOA SPSS tritt folgende Exception auf: + java.lang.ClassCastException: iaik.asn1.structures.Name. + Was kann der Fehler sein?

+

A: 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.

+

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 +

   security.provider.1=sun.security.provider.Sun
   security.provider.2=com.sun.rsajca.Provider  
 
-durch folgenden Eintrag ergänzt werden: -
+          durch folgenden Eintrag ergänzt werden: 
+          
   security.provider.3=iaik.security.provider.IAIK
 
-

+

+
+

Frage 2

+

Q: 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?

+

A: Ja, das ist möglich. Wenn Sie eine mySQL-Datenbank + verwenden möchten, sind folgende Maßnahmen zu treffen:

+
+
    +
  • + Laden + Sie den mySQL-JDBC-Connector herunter und fügen Sie das im + Download enthaltene jar-File mysql-connector-java-3.x.x-stable-bin.jar + zum Klassenpfad für MOA SPSS hinzu. +
  • +
  • Geben Sie im MOA-Konfigurationsfile mit Hilfe des generischen Konfigurationsparameters + DataBaseArchiveParameter.JDBCUrl + eine gültige JDBC-URL zu Ihrer mySQL-Datenbank angeben. Hinweise + zum Format dieser URL für mySQL finden Sie hier. +
  • +
+

Wenn Sie eine andere Datenbank verwenden möchten, beispielsweise + Oracle, + gehen Sie sinngemäß wie oben vor und setzen zusätzlich + noch folgenden Schritt:

+
    +
  • +
    Geben Sie im MOA-Konfigurationsfile mit + Hilfe des generischen Konfigurationsparameters DataBaseArchiveParameter.JDBCDriverClass + den vollständig qualifizierten Klassennamen des JDBC-Treibers + an, der die Verbindung zu Ihrer Datenbank herstellt.
    +
  • +
- + + 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: false - - - -
name: DataBaseArchiveParameter.JDBCUrl
-Gibt eine JDBC-URL zur Datenbank an, in der Revozierungsinformation archiviert werden soll. Wird dieser -Parameter nicht gesetzt, dann wertet MOA den Parameter archiveRevocationInfo nicht aus der Konfigurationsdatei -aus sondern setzt den Wert automatisch auf false. -
-Der genaue Aufbau der JDBC-URL ist abhängig von der verwendeten Datenbank. Im Fall von PostgreSQL kann folgende -URL verwendet werden: jdbc:postgresql://host/moadb?user=moauser&password=moapassword wobei -host, moadb, moauser und moapassword an die tatsächlich verwendete Datenbank angepasst werden muss.
-Die Verwendung von "&amp" ist erforderlich, da "&" einen Fehler bei der Validierung der -Konfigurationsdatei verursacht. -
-Die Archivdaten werden nur MOA-SPSS-intern benötigt und das Format ist daher für den Betrieb des Servers nicht relevant. -
-value:
Gültige Werte: String -
- -

+ + + + + + + +
name: DataBaseArchiveParameter.JDBCUrl
Gibt eine JDBC-URL zur Datenbank an, in der + Revozierungsinformation archiviert werden soll. Wird dieser + Parameter nicht gesetzt, dann wertet MOA den Parameter archiveRevocationInfo + nicht aus der Konfigurationsdatei aus sondern setzt den + Wert automatisch auf false.
+ Der genaue Aufbau der JDBC-URL ist abhängig von der verwendeten + Datenbank. Im Fall von PostgreSQL kann folgende URL verwendet + werden: jdbc:postgresql://host/moadb?user=moauser&password=moapassword + wobei host, moadb, moauser und moapassword + an die tatsächlich verwendete Datenbank angepasst werden + muss.
+ Die Verwendung von "&amp" ist erforderlich, + da "&" einen Fehler bei der Validierung der + Konfigurationsdatei verursacht.
+ Die Archivdaten werden nur MOA-SPSS-intern benötigt und + das Format ist daher für den Betrieb des Servers nicht relevant. +
+ value:
+ Gültige Werte: String
+ + + + + + + +
name: DataBaseArchiveParameter.JDBCDriverClass
+

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. +

+

Der Parameter wird nur dann ausgewertet, wenn der generische + Konfigurationsparameter archiveRevocationInfo + auf den Wert true gesetzt ist. +

Hinweis: Wird im generischen Konfigurationsparameter + DataBaseArchiveParameter.JDBCUrl 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. +


+ value:
+ Gültige Werte: vollständig qualifizierter Java-Klassenname
+

@@ -278,7 +311,7 @@ interpretiert. der PIN für die Aktivierung des privaten Schlüssels -

+

@@ -301,7 +334,7 @@ Pfadnamen relativ zur MOA SP/SS Konfigurationsdatei. das Passwort zur Aktivierung des privaten Schlüssels in der PKCS#12-Datei -

+

@@ -345,7 +378,7 @@ INFO | 10 12:56:43,023 | main |

  • 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
  • Nach einem neuerlichen Start von MOA SP/SS stehen die Key-Definitionen zur Verfügung
  • -

    +

    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 certtool -info <certfilename> aus dem Zertifikat gelesen werden. @@ -400,7 +433,7 @@ G unspecified, keyCompromise, cACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold, removeFromCRL, privilegeWithdrawn, aACompromise -

    +

    @@ -433,7 +466,7 @@ Die folgende Tabelle bezeichnet jene Elemente, die in den Dateien als Dokumentel

    -

    +

    @@ -450,9 +483,9 @@ TrustProfile enth (nur das Schema file wird unterstützt). Alle für diese TrustProfileID vertrauenswürdigen Zertifikate werden in diesem Verzeichnis gespeichert. -

    +

    - +


    @@ -532,5 +565,5 @@ wird die urspr - + \ 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."); + } + } + } } /** -- cgit v1.2.3