Freigeben über


Vorgehensweise: Arbeiten mit digitalen Signaturen

Das Objektmodell des Microsoft.Office.InfoPath-Namespaces bietet Features für die programmgesteuerte Arbeit mit digitalen Signaturen.

Features für digitale Signaturen

Mithilfe der für digitale Signaturen von InfoPath bereitgestellten Features können Sie Folgendes ausführen:

  • Zulassen von Signaturen für das gesamte Formular oder für bestimmte Gruppen von Daten im Formular, die getrennt signiert werden können.

  • Angeben bei jeder signierbaren Datengruppe, ob einzelne oder mehrere Signaturen zulässig sind und in welcher Beziehung diese zueinander stehen sollen. So können Sie beispielsweise angeben, ob es sich um parallele gemeinsame Signaturen handelt oder ob alle früheren Signaturen durch jede neue Signatur gegengezeichnet werden.

  • Angeben einer Meldung, die angezeigt werden soll, wenn Benutzer das Formular signieren.

  • Einfügen und Anzeigen einer Signatur im Dokument.

  • Anzeigen überprüfbarer Nichtabstreitbarkeitsinformationen, die jeder Signatur zur Steigerung der Sicherheit hinzugefügt wurden. Diese zusätzlichen Informationen, die eine Ansicht des Formulars einschließen, wie es jeder signierenden Person vorgelegt wurde, sind ein Bestandteil der Signatur und können nicht entfernt werden, ohne die Signatur ungültig zu machen. Sie können diese Daten jederzeit erneut aufrufen, indem Sie auf die Signatur im Formular klicken, um das Dialogfeld Digitale Signatur überprüfen anzuzeigen.

  • Profitieren von einem umfangreicheren Objektmodell zum Arbeiten mit digitalen Signaturen. Fügen Sie dem Signaturblock in vollständig vertrauenswürdigen Formularen benutzerdefinierte Informationen zum Objektmodell für digitale Signaturen hinzu.

Übersicht über das Objektmodell für digitale Signaturen

Sign-Ereignis

Das Objektmodell für digitale Signaturen stellt das folgende Ereignis bereit.

Name Beschreibung

Sign

Tritt auf, nachdem eine signierbare Datengruppe zum Signieren ausgewählt wurde.

Mithilfe dieses Ereignisses können Sie die in der digitalen Signatur gespeicherten Daten bearbeiten. So können Sie beispielsweise Daten eines vertrauenswürdigen Zeitstempelservers oder eine serverseitige Gegensignatur der Transaktion hinzufügen. Sie können mit diesem Ereignis auch Signaturen blockieren, wenn der aktuelle Benutzer kein Mitglied einer bestimmten Gruppe ist.

SignEventArgs-Objekt

Ein Ereignishandler für das Sign-Ereignis kann mit dem SignEventArgs-Ereignisobjekt arbeiten, das die folgenden Eigenschaften bietet.

Name Beschreibung

SignedDataBlock

Ruft die signierbare Datengruppe ab, die das Sign-Ereignis ausgelöst hat.

SignatureWizard

Ruft ab, ob das Dialogfeld Digitale Signaturen angezeigt werden soll, oder legt die Einstellung fest.

Hinweis

Im Microsoft.Office.Interop.InfoPath.SemiTrustObjektmodell mit verwaltetem Code, das im Lieferumfang von InfoPath 2003 enthalten ist, bietet das SignEvent-Ereignisobjekt für das OnSign-Ereignis eine XDocument-Eigenschaft für den Zugriff auf das XDocument-Objekt des dem Ereignis zugeordneten Formulars. Dies ist bei mit InfoPath 2007 erstellten Formularvorlagen, die das Microsoft.Office.InfoPath-Objektmodell verwenden, nicht erforderlich, da auf die Objektmodellmember der XmlForm-Klasse über Formalcode mithilfe des Schlüsselwortes this (C#) oder Me (Visual Basic) zugegriffen werden kann. Wenn Sie beispielsweise auf die Signed-Eigenschaft der XmlForm-Klasse zugreifen, um zu bestimmen, ob ein Formular signiert ist, können Sie entweder this.Signed oder Me.Signed. eingeben.

Auflistungen und Objekte

Das Objektmodell für digitale Signaturen stellt die folgenden Auflistungen bereit.

Name Beschreibung

SignedDataBlockCollection

Die Auflistung der SignedDataBlock-Objekte in der Formularvorlage, wie sie zur Entwurfszeit im InfoPath-Entwurfsmodus definiert wurde.

Die SignedDataBlockCollection-Auflistung implementiert Eigenschaften, mit denen auf die einem Formular zugeordneten SignedDataBlock-Objekte zugegriffen wird. Der Zugriff auf das einem Formular zugeordneten SignedDataBlockCollection-Objekt erfolgt über die SignedDataBlocks-Eigenschaft der XmlForm-Klasse.

SignatureCollection

Enthält eine Auflistung von Signature-Objekten für jedes SignedDataBlock-Objekt im Formular.

Die SignatureCollection-Klasse implementiert Eigenschaften und eine Methode, um auf die zugeordneten Signature-Objekte eines Formulars zuzugreifen und eine Signatur zu erstellen. Auf das einem SignedDataBlock zugeordneten SignatureCollection-Objekt kann mithilfe der Signatures-Eigenschaft zugegriffen werden.

Beachten Sie bei Verwendung der CreateSignature-Methode der SignatureCollection-Klasse, dass die Signatur erst dann geschrieben wird, wenn die Sign-Methode für das Signature-Objekt aufgerufen wird. Diese Methoden können nur vom Sign-Ereignishandler einer vollständig vertrauenswürdigen Formularvorlage aus aufgerufen werden.

Das Objektmodell für digitale Signaturen stellt die folgenden Objekte bereit.

Name Beschreibung

SignedDataBlockObject

Stellt eine signierbare Datengruppe in einem Formular dar. Das SignedDataBlock-Objekt stellt eine Reihe von Eigenschaften und eine Methode für die programmgesteuerte Interaktion mit einer signierbaren Datengruppe bereit.

SignatureObject

Stellt eine digitale Signatur dar, die einem Formular oder einer signierbaren Datengruppe in einem Formular hinzugefügt wurde. Die SignatureObject-Auflistung implementiert Eigenschaften, die zum Abrufen von Informationen zur digitalen Signatur verwendet werden können, sowie die Sign-Methode zum Schreiben des XML-Blocks mit digitalen Signaturen und zum Berechnen von dessen kryptografischem Hashwert.

CertificateObject

Stellt das digitale X.509-Zertifikat dar, das zum Erstellen der Signatur verwendet wurde.

Programmgesteuertes Arbeiten mit digitalen Signaturen

Das Objektmodell des Microsoft.Office.InfoPath-Namespaces stellt Member für die programmgesteuerte Interaktion mit digitalen Signaturen bereit. So können insbesondere in vollständig vertrauenswürdigen Formularen benutzerdefinierte Informationen dem Signaturblock hinzugefügt werden, bevor ein Commit für ihn ausgeführt wird. Dies geschieht entsprechend dem folgenden Zeitplan:

  1. Der Benutzer wählt aus, dass einem Formular eine digitale Signatur hinzugefügt werden soll.

  2. Das Dialogfeld Digitale Signaturenwird angezeigt, der Benutzer klickt auf Hinzufügen und wählt dann die zu signierenden Daten aus.

  3. Das Sign-Ereignis für die ausgewählten Daten, die durch das SignedDataBlock-Objekt dargestellt werden, wird ausgelöst. Die Sign-Methode des SignedDataBlock-Objekts und die CreateSignature-Methode der SignatureCollection-Auflistung werden ausgeführt.

  4. Alle optionalen benutzerdefinierten Aktionen werden ausgeführt.

  5. Die Sign-Methode des Signature-Objekts wird ausgeführt.

  6. Das Dialogfeld Signieren wird zum Eingeben eines Namens (oder Auswählen eines Signaturbildes), zum Auswählen eines Zertifikats für die Signierung und zum Eingeben von Kommentaren angezeigt.

  7. Wenn auf die Schaltfläche Signieren geklickt wird, wird die Signatur der Auflistung mit Signaturen für das Formular hinzugefügt, und die Nichtabstreitbarkeitsinformationen werden mit der Signatur aufgezeichnet und gespeichert (dies kann später angezeigt werden, indem im Dialogfeld Digitale Signaturen auf Signiertes Formular anzeigen und dann auf Siehe die zusätzlichen gesammelten Signierungsinformationen geklickt wird).

Im folgenden Beispiel wird die Sign-Methode aufgerufen, wenn der Benutzer die ausgewählten Daten signiert und die Signatur mit einem Zeitstempelwert gegenzeichnet, der von einem vertrauenswürdigen Zeitstempeldienst abgerufen wurde.

public void FormEvents_Sign(object sender, SignEventArgs e)
{
   // Add a new Signature object to the SignedDataBlockCollection.
   Signature thisSignature = 
      e.SignedDataBlock.Signatures.CreateSignature();

   // Write the XML digital signature block and compute hash
   // for signed data.
   thisSignature.Sign();

   // Countersign the signature with a trusted timestamp.

   // Get the XML node storing the signature block.
   XPathNavigator oNodeSig = thisSignature.SignatureBlockXmlNode;
   XPathNavigator oNodeSigValue = 
      oNodeSig.SelectSingleNode(
      ".//*[local-name(.)='signatureValue']");

   // Get timestamp from a trusted timestamp service (fictitious).
   MyTrustedTimeStampService s = new MyTrustedTimeStampService();
   string strVerifiedTimeStamp = s.AddTimeStamp(oNodeSigValue.Value);

   // Add the value returned from the timestamp service to the 
   // unsigned part of the signature block.
   XPathNavigator oNodeObj = 
      oNodeSig.SelectSingleNode(".//*[local-name(.)='Object']");
   XPathNavigator oNode = oNodeObj.Clone();
   oNode.SetValue(strVerifiedTimeStamp);
   oNodeObj.MoveToParent();
   oNodeObj.AppendChild(oNode);

   e.SignatureWizard = false;
}
Public Sub FormEvents_Sign(ByVal sender As Object, _
   ByVal e As SignEventArgs)
   ' Add a new Signature object to the SignedDataBlockCollection.
   Dim thisSignature As Signature = 
      e.SignedDataBlock.Signatures.CreateSignature

   ' Write the XML digital signature block and compute hash
   ' for signed data.
   thisSignature.Sign()

   ' Countersign the signature with a trusted timestamp.

   ' Get the XML node storing the signature block
   Dim oNodeSig As XPathNavigator  = _
      thisSignature.SignatureBlockXmlNode
   Dim oNodeSigValue As XPathNavigator  = _
      oNodeSig.SelectSingleNode(_
      ".//*[local-name(.)='signatureValue']")

   ' Get timestamp from a trusted timestamp service (fictitious).
   Dim s As MyTrustedTimeStampService = New MyTrustedTimeStampService()
   Dim strVerifiedTimeStamp As String  = _
      s.AddTimeStamp(oNodeSigValue.Value)

   ' Add the value returned from the timestamp service to the 
   ' unsigned part of the signature block.
   Dim oNodeObj As XPathNavigator  = 
      oNodeSig.SelectSingleNode(".//*[local-name(.)='Object']")
   Dim oNode As XPathNavigator  = oNodeObj.Clone()
   oNode.SetValue(strVerifiedTimeStamp)
   oNodeObj.MoveToParent()
   oNodeObj.AppendChild(oNode)

   e.SignatureWizard = False