none
Access 2007 - Überprüfung der digitalen Signatur

    Allgemeine Diskussion

  • Hallo,

    wir haben eine Access Datenbank, die mit einem für Windows automatisch vertraunswürdigem CodeSigning-Zertifikat inkl. Timestamp signiert wurde. Da das Zertifikat in ein paar Wochen abläuft, wollte ich vorsichtshalber testen ob sich die Datenbank dann auch noch ohne Sicherheitswarnung wird öffnen lassen. Also habe ich das Datum am PC ein wenig in die Zukunft geschraubt und bekomme nun beim Öffnen folgenden Sicherheitshinweis: "Die digitale Signatur ist abgelaufen" und in den Details "Ein erforderliches Zertifikat befindet sich nicht im Gültigkeitszeitraum gemessen an der aktuellen Systemezit oder dem zeitstempel in der signierten Datei. Danach öffnet sich dennoch die Datenbank.

    Kommt die Sicherheitswarnung weil
    a) das Zertifikat abgelauen ist? Wozu dann der Timestamp?
    b) wenn das Zertifikat abgelaufen ist immer der Timestamp Server befragt wird und in diesem Fall keine vernünftige Antwort geben kann? Was, wenn kein Internetzugang zur Verfügung steht?

    Auf http://office.microsoft.com/en-us/access/HP010446121033.aspx steht unter anderem:
    When digitally signing macros, consider obtaining a timestamp so that others can verify your signature even after the certificate used for the signature has expired. See Microsoft Office Online for more information on macro security and timestamps.

    Allerdings steht auf http://technet.microsoft.com/de-de/library/dd443660.aspx:
    Standardmässig sind ActiveX-Steuerelemente und Makros, die von einem Herausgeber aus der Liste vertrauenswrdiger Herausgeber signiert wurden, aktiviert und werden ohne Warnung ausgefhrt, wenn die folgenden Bedingungen zutreffen:
    • Das ActiveX-Steuerelemente bzw. das Makro ist mit einer digitalen Signatur versehen.
    • Die digitale Signatur ist gültig.
    • Die digitale Signatur ist aktuell (nicht abgelaufen).
    • Das mit der digitalen Signatur verbundene Zertifikat wurde von einer anerkannten Zertifizierungsstelle (Certification Authority, CA) ausgestellt.

    Kann mir jemand sagen was tatsächlich passieren wird wenn das Zertifikat abgelaufen ist?

    Vielen Dank im Vorhinein!

    Montag, 1. März 2010 14:18

Alle Antworten

  • Hallo Dagmar,

    deine Frage hast Du dir doch im Grunde schon selbst beantwortet, man erhält die von Dir genannte Warnung. Außerdem kannst Du natürlich mit dem Zertifikat nicht mehr gültig signieren.


    - Florian
    Mittwoch, 6. Oktober 2010 06:35
  • Hallo,

    vertraunswürdigem CodeSigning-Zertifikat inkl. Timestamp

    Also per Selfcert.exe oder ein Class 2/3-Zertifikat?

    Da das Zertifikat in ein paar Wochen abläuft, [...]

    Kommt die Sicherheitswarnung weil
    a) das Zertifikat abgelauen ist?

    Ja.

    Wozu dann der Timestamp?

    Zertifikate sind immer zeitlich limitiert. Oeffentliche muessen
    normalerweise jaehrlich erneuert werden, private sind 6 Jahre gueltig.

    b) wenn das Zertifikat abgelaufen ist immer der Timestamp Server befragt
    wird und in diesem Fall keine vernünftige Antwort geben kann? Was, wenn
    kein Internetzugang zur Verfügung steht?

    Dein lokales Datum wird geprueft. D.h. wenn du analog deines Tests die Uhr
    zurueckstellst, sollte es funktionieren.

    Kann mir jemand sagen was tatsächlich passieren wird wenn das Zertifikat
    abgelaufen ist?

    Das, was dein Test gezeigt hat. Die Meldung erscheint bei jedem
    Programmstart. Das ist einer der Gruende, warum die ganze Zertifiziererei
    nicht besonders angenommen worden ist. Oeffentliche Zertifikate sind teuer,
    private fuer Installationen mit mehreren Frontends unsinnig, weil bei jeder
    Aenderung im FE das Zertifikat auf dem Zielrechner wieder erstellt werden
    muss. www.donkarl.com?FAQ2.28 kennst du?

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 6. Oktober 2010 10:12
    Moderator
  • Hallo Peter,

    Wozu dann der Timestamp?

    Zertifikate sind immer zeitlich limitiert. Oeffentliche muessen
     normalerweise jaehrlich erneuert werden, private sind 6 Jahre gueltig.

    Eigentlich soll der Timestamp doch bestätigen das ein Zertifikat zum Zeitpunkt der Signatur gültig war und damit die Signatur gültig ist, nicht mehr und nicht weniger. Von daher halte ich diese Warnung für einen Fehler, schließlich soll vor ungültigen und nicht vor gültigen Signaturen gewarnt werden. Das Ablaufdatum des Zertifikats sollte im nachhinein eigentlich keine Rolle mehr spielen, es zählt der Zeitpunkt der Signatur.

    - Florian
    Mittwoch, 6. Oktober 2010 12:53
  • Hallo,

    Florian.H wrote:

    Wozu dann der Timestamp?
    Zertifikate sind immer zeitlich limitiert. Oeffentliche muessen
     normalerweise jaehrlich erneuert werden, private sind 6 Jahre gueltig.

    Eigentlich soll der Timestamp doch bestätigen das ein Zertifikat zum
    Zeitpunkt der Signatur gültig war und damit die Signatur gültig ist,
    nicht mehr und nicht weniger.

    Das Zertifikat hat immer eine Laufzeit, gueltig ab Ausstelldatum. Du kannst
    es mit dem TUEV vergleichen. Es koennte ja sein, dass seit der
    Zertifizierung etwas passiert ist, das die Erteilung eines neuen
    Zertifikats beeinflussen wuerde.
    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 6. Oktober 2010 13:56
    Moderator
  • Das ist mir schon klar, hat aber mit dem Problem wenig zu tun, es soll ja gar nicht neu signiert werden.

    Was vorliegt ist eine gültig signierte Anwendung, bei deren Ausführung plötzlich Warnungen ausgespuckt werden, weil das Zertifikat abgelaufen ist... das ist doch für einen Benutzer völlig unverständlich, "gestern war die Anwendung noch sicher und heute nicht mehr?", das weckt sicher kein Vertrauen beim Anwender und sollte nach allem was ich zum Signieren gelesen habe auch nicht so sein, um das zu vermeiden wird ja gerade der Timestamp verwendet. Um solche Warnungen zu vermeiden müsste man den Anwender regelmäßig gängeln eine frisch signierte Version zu installieren, auch wenn sich gar nichts am Programm geändert hat, was wenig Sinnvoll ist, wie ich finde.

    Da es aber anders ist, muss man sich wohl kaum wundern das die "Zertifizierei" nicht besonders angenommen wird.


    - Florian
    Mittwoch, 6. Oktober 2010 14:32
  • Hallo,

    Florian.H wrote:

    [...] und sollte nach allem was ich zum Signieren
    gelesen habe auch nicht so sein, um das zu vermeiden wird ja gerade der
    Timestamp verwendet.

    Was hast du denn wo gelesen?

    Um solche Warnungen zu vermeiden müsste man den
    Anwender regelmäßig gängeln eine frisch signierte Version zu
    installieren, auch wenn sich gar nichts am Programm geändert hat, was
    wenig Sinnvoll ist, wie ich finde.

    Nein. Du musst nur das Class 2/3 Zertifikat verlaengern, dann gibt es beim
    Benutzer keine Meldungen. Wenn du mit Selfcert zertifiziert hast, musst du
    allerdings bei jeder Aenderung ein neues Zertifikat auf dem Zielrechner
    erstellen, bzw. nach 6 Jahren auch, wenn nichts geaendert worden ist.

    Da es aber anders ist, muss man sich wohl kaum wundern das die
    "Zertifizierei" nicht besonders angenommen wird.

    Genau das ist der Fall. Siehe www.donkarl.com?FAQ2.28

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 6. Oktober 2010 17:04
    Moderator
  • Hallo Peter,

    unter anderem steht zum timestamp etwas in der MSDN  "...Time stamping allows Authenticode signatures to be verifiable even after the certificates used for signature have expired..." http://msdn.microsoft.com/en-us/library/bb931395(VS.85).aspx

    und in der Doku zum WinVerifyTrust steht dass das Prüfergebnis CERT_E_EXPIRED zurück kommt wenn die Prüfung gegenüber der Systemzeit oder dem timestamp in der signierten Datei nicht im Gültigkeitszeitraum liegt (Zitat: "A required certificate is not within its validity period when verifying against the current system clock or the timestamp in the signed file." ebenfalls MSDN) und demnach macht ein Zeitstempel (timestamp) doch nur Sinn, wenn bei dieser Prüfung, dieser auch entscheidend ist, wenn vorhanden.

    Dann hab ich noch an anderer Stelle eine Begründung für die Verwendung von Zeitstempeln gefunden, welche meiner Meinung nach so auch Sinn macht: Zitat: "If signature timestamp is present, the application which validates (verifies) the signature, will check whether the certificates involved into signature validation were valid at the moment of signing. If there's no timestamp for the signature, certificate validity is checked for the moment of signature validation, which is not always acceptable." in einem Artikel von Eldos http://www.eldos.com/sbb/articles/5731.php

    Das es den CA's nur Recht ist, wenn man immer eine Verlängerung kaufen muss, kann ich wohl nachvollziehen, aber wie ich bereits schrieb, für den Benutzer der Software ist solch ein Verhalten eine Zumutung und den zitierten Stellen nach wohl auch gar nicht so vorgesehen.

    Was soll einen eigentlich davon abhalten sein eigenes Zertifikat mit 30 oder mehr Jahren Laufzeit zu erstellen, es mit einem erworbenen zu Installieren und danach unabhängig von der Gängelung der CA's zu sein?

    Und woher kommt die Zahl von 6 Jahren?

     

    Gruß


    - Florian
    Donnerstag, 7. Oktober 2010 07:07
  • Hallo,

    Florian.H wrote:

    unter anderem steht zum timestamp etwas in der MSDN  "...

    Um eines klarzustellen, du laeufst bei mir offene Tueren ein. Ich halte von
    der Zertifiziererei aus genannten Gruenden auch nichts. Aendert aber nichts
    an den Tatsachen und die sind wie sie sind. Wenn das Zertifikat fehlt ->
    Meldung. Wenn es abgelaufen ist -> Meldung. In beiden Faellen kannst du die
    Anwendung ja trotzdem starten.

    Das es den CA's nur Recht ist, wenn man immer eine Verlängerung kaufen
    muss,

    Genau ;-)

    Was soll einen eigentlich davon abhalten sein eigenes Zertifikat mit 30
    oder mehr Jahren Laufzeit zu erstellen, es mit einem erworbenen zu
    Installieren und danach unabhängig von der Gängelung der CA's zu sein?

    Das ist technisch nicht moeglich.

    Und woher kommt die Zahl von 6 Jahren?

    Bevor ich meine erste Antwort schrieb, hatte ich mit Selfcert ein
    Zertifikat auf meinem Rechner angelegt. Auf den Gueltigkeitszeitraum hatte
    ich keinen Einfluss, er wurde mir mit 1/1/2010 - 31/12/2016 angezeigt.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Donnerstag, 7. Oktober 2010 09:14
    Moderator
  • Um eines klarzustellen, du laeufst bei mir offene Tueren ein. Ich halte von
    der Zertifiziererei aus genannten Gruenden auch nichts. Aendert aber nichts
    an den Tatsachen und die sind wie sie sind. Wenn das Zertifikat fehlt ->
    Meldung. Wenn es abgelaufen ist -> Meldung. In beiden Faellen kannst du die
    Anwendung ja trotzdem starten.

    Das Verhalten bestreite ich auch nicht, für falsch halte ich es dennoch.

    Was soll einen eigentlich davon abhalten sein eigenes Zertifikat mit 30
    oder mehr Jahren Laufzeit zu erstellen, es mit einem erworbenen zu
    Installieren und danach unabhängig von der Gängelung der CA's zu sein?

    Das ist technisch nicht moeglich.

    Dem muss ich Widersprechen, ich habe zu Testzwecken bereits eigene Zertifikate installiert.

    Und woher kommt die Zahl von 6 Jahren?

    Bevor ich meine erste Antwort schrieb, hatte ich mit Selfcert ein
    Zertifikat auf meinem Rechner angelegt. Auf den Gueltigkeitszeitraum hatte
    ich keinen Einfluss, er wurde mir mit 1/1/2010 - 31/12/2016 angezeigt.

      Verstehe, dann bietet Selfcert dort wohl keine Einstellmöglichkeiten, mit makecert hat man allerdings keine Schwierigkeiten Zertifikate mit deutlich längeren Laufzeiten anzulegen, z. B. gültig bis 26.07.2110 (liegt noch bei mir im Zertifikatspeicher).
    - Florian
    Donnerstag, 7. Oktober 2010 09:41
  • Hallo,

    Florian.H wrote:

    Was soll einen eigentlich davon abhalten sein eigenes Zertifikat mit 30
    oder mehr Jahren Laufzeit zu erstellen, es mit einem erworbenen zu
    Installieren und danach unabhängig von der Gängelung der CA's zu sein?

    Das ist technisch nicht moeglich.

    Dem muss ich Widersprechen, ich habe zu Testzwecken bereits eigene
    Zertifikate installiert.

    Nochmal Klartext: Es ist moeglich, ein eigenes Zertifikat zu erstellen, wie
    im Thread bereits mehrfach erwaehnt, per Selfcert fuer den operationalen
    Einsatz (wenn auch kompliziert), und per Makecert fuer Testzwecke.

    Du schreibst, "eigenes ... erstellen ... mit erworbenem ... installieren",
    das ist nicht moeglich. Du kannst die Anwendung entweder mit einem
    selbst erstellten oder oeffentlichen Zertifikat signieren. Sollte ich
    deinen Kommentar missverstanden haben, klaer mich auf ;-)
    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Donnerstag, 7. Oktober 2010 13:55
    Moderator
  • Hallo Peter!

    Mir ist ehrlich gesagt überhaupt gar nicht klar warum Du der Meinung bist, dass man kein Installationspaket, welches das eigene Zertifkat installiert, erstellen kann, welches man dann mit einem erworbenen Zertifikat signiert, damit der Benutzer schon bei der Installation keinerlei Begegnung mit entsprechenden Meldungen hat. Wenn man dann sein eigenes Zertifikat installiert hat, dann kann auch die Anwendung damit signiert sein und der Anwender bekommt auch bei Programmausführung keine Meldungen wegen ungültiger oder abgelaufener Zertifikate. Ob ich nun ein Zertifkat installiere das ich mit SelfCert oder mit MakeCert erstellt habe spielt dabei überhaupt keine Rolle und ja, ich weiß das in der Doku steht man solle die Makecert Zertifikate nur zu Testzwecken benutzen.

     Ich habe es noch nicht geprüft, aber unterscheiden sich die Zertifikate überhaupt voneinander, also eines das mit SelfCert und eines das mit MakeCert erstellt wurde? Kann Windows ein Testzertifikat irgendwie erkennen? Vielleicht gibt es ja zukünftig Meldungen bei Access wenn es sich um ein Testzertifikat handelt...

    Ich hoffe es ist klar geworden was ich meine. Sonst möchte ich es auch gern dabei belassen da die Diskussion nichts mehr mit der gestellten Frage zu tun hat.

    Gruß


    - Florian
    Donnerstag, 7. Oktober 2010 14:15
  • Hallo,

    Florian.H wrote:

    Mir ist ehrlich gesagt überhaupt gar nicht klar [...]

    Wir reden offensichtlich aneinander vorbei. Meine Kommentare betreffen das Signieren einer Access-Anwendung in seinen Varianten, deine drehen sich um das Erstellen/Verteilen von Zertifikaten im Allgemeinen. Dem widerspreche ich auch nicht.

    Wenn man dann sein eigenes Zertifikat installiert hat, dann kann auch die
    Anwendung damit signiert sein und der Anwender bekommt auch bei
    Programmausführung keine Meldungen wegen ungültiger oder abgelaufener
    Zertifikate.

    Das ist genau der Punkt. Wenn Zertifikat und Anwendung ok sind, kommt keine Meldung. Aber in den beiden Faellen, 1) wenn das Zertifikat abgelaufen ist, wie weiter oben bereits diskutiert und 2) wenn sich die Anwendung seit der letzten Signatur veraendert hat, kommt die Meldung. Das ist ja der Zweck der Zertifizierung. Ok, es gibt weitere Faelle, z.B. wenn ein oeffentliches Zertifikat widerrufen wird, aber den Fall koennen wir vernachlaessigen.

     Ich habe es noch nicht geprüft, aber unterscheiden sich die Zertifikate
    überhaupt voneinander, also eines das mit SelfCert und eines das mit
    MakeCert erstellt wurde? Kann Windows ein Testzertifikat irgendwie
    erkennen? Vielleicht gibt es ja zukünftig Meldungen bei Access wenn es
    sich um ein Testzertifikat handelt...

    Das weiss ich auch nicht, mangels eigener Erfahrung mit MakeCert. Auch http://msdn.microsoft.com/de-de/library/bfsktky3%28VS.80%29.aspx schweigt sich darueber aus. Fuer SelfCert gilt, dass das Zertifikat immer nur fuer den ausfuehrenden Rechner gilt, d.h. jeweils am Zielrechner erstellt, und bei jeder Aenderung der Anwendung wieder signiert werden muss. Ansonsten -> Meldung. Ich kann mir vorstellen, dass es mit MakeCert nicht anders ist. Der Vorteil von Class 2/3-Zertifikaten ist, dass sie online geprueft werden und wir Entwickler uns bis zum Ablauf um nichts weiter kuemmern muessen.

    Ich hoffe es ist klar geworden was ich meine. Sonst möchte ich es auch
    gern dabei belassen da die Diskussion nichts mehr mit der gestellten
    Frage zu tun hat.

    ACK, obwohl wir IMO On-Topic sind.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Donnerstag, 7. Oktober 2010 14:56
    Moderator