Utilisation des signatures numériques
Le modèle objet de l'espace de noms Microsoft.Office.InfoPath fournit les fonctionnalités d'utilisation des signatures numériques par programmation.
Fonctionnalités de signature numérique
Les fonctionnalités de signature numérique fournies par InfoPath vous permettent d'effectuer les opérations suivantes :
activer les signatures pour l'ensemble du formulaire ou pour des jeux de données spécifiques à signer séparément dans le formulaire ;
préciser, pour chaque jeu de données pouvant être signé, si une ou plusieurs signatures sont autorisées et quelles seront leurs relations. Par exemple, vous pouvez spécifier s'il s'agit de co-signatures parallèles ou si chaque nouvelle signature contre-signe toutes les signatures précédentes ;
définir un message à présenter aux utilisateurs du formulaire lorsqu'ils signent le formulaire ;
insérer et afficher une signature dans le document ;
afficher des informations vérifiables de non-répudiation ajoutées à chaque signature pour une plus grande sécurité. Ces informations supplémentaires, qui comprennent une vue du formulaire tel qu'il est présenté à chaque signataire, font partie de la signature et ne peuvent pas en être supprimées sans annuler la signature. Vous pouvez à tout moment revoir ces données en cliquant sur la signature dans le formulaire pour afficher la boîte de dialogue Vérifier la signature numérique ;
tirer parti d'un modèle objet permettant l'utilisation de signatures numériques et ajouter des informations personnalisées au bloc de signatures dans les formulaires entièrement fiables via un modèle objet de signature numérique.
Présentation du modèle objet de signatures numériques
Événement Signature (Sign)
Le modèle objet des signatures numériques fournit l'événement qui suit.
Nom | Description |
---|---|
Se produit une fois qu'un ensemble de données signables a été sélectionné pour une signature. Vous pouvez utiliser cet événement pour manipuler les données stockées dans la signature numérique. Par exemple, vous pouvez ajouter les données d'un serveur d'horodatage fiable ou une contre-signature côté serveur de la transaction. Vous pouvez également utiliser cet événement pour bloquer la signature si l'utilisateur actuel n'est pas membre d'un groupe spécifique. |
Objet SignEventArgs
Un gestionnaire d'événements pour l'événement Sign peut fonctionner avec l'objet d'événement SignEventArgs qui offre les propriétés suivantes.
Nom | Description |
---|---|
Obtient l'ensemble de données signables qui a déclenché l'événement Sign. |
|
Détermine si la boîte de dialogue Signatures numériques doit s'afficher. |
Remarque |
---|
Dans le modèle objet de code managé Microsoft.Office.Interop.InfoPath.SemiTrust livré avec InfoPath 2003, l'objet d'événement SignEvent pour l'événement OnSign fournit une propriété XDocument qui permet d'accéder à l'objet XDocument du formulaire associé à l'événement. Ceci n'est pas nécessaire avec les modèles de formulaires créés avec InfoPath 2007 à l'aide du modèle objet Microsoft.Office.InfoPath, car les membres du modèle objet de la classe XmlForm sont accessibles dans le code du formulaire à l'aide du mot clé this (C#) ou Me (Visual Basic). Par exemple, pour accéder à la propriété Signed de la classe XmlForm afin de déterminer si un formulaire est signé, vous pouvez taper |
Collections et objets
Le modèle objet des signatures numériques fournit les collections suivantes.
Nom | Description |
---|---|
La collection des objets SignedDataBlock dans le modèle de formulaire tel que défini au moment de la conception en mode Concepteur InfoPath. La collection SignedDataBlockCollection implémente des propriétés qui permettent d'accéder aux objets SignedDataBlock associés à un formulaire. L'objet SignedDataBlockCollection associé à un formulaire est accessible par l'intermédiaire de la propriété SignedDataBlocks de la classe XmlForm. |
|
Contient une collection d'objets Signature pour chaque objet SignedDataBlock dans le formulaire. La classe SignatureCollection met en œuvre des propriétés et une méthode qui peuvent être utilisées pour accéder aux objets Signature associés à un formulaire et créer une signature. L'objet SignatureCollection associé à un SignedDataBlock est accessible à l'aide de la propriété Signatures. Lorsque vous utilisez la méthode CreateSignature de la classe SignatureCollection, rappelez-vous que la signature n'est pas écrite jusqu'à ce que la méthode Sign soit appelée sur l'objet Signature. Ces méthodes peuvent être appelées uniquement depuis le gestionnaire d'événements Sign d'un modèle de formulaire entièrement fiable. |
Le modèle objet des signatures numériques fournit les objets suivants.
Nom | Description |
---|---|
Représente un ensemble de données signables dans un formulaire. L'objet SignedDataBlock fournit une méthode et un certain nombre de propriétés qui peuvent être utilisées pour interagir par programme avec un ensemble de données signables. |
|
Représente une signature numérique ajoutée à un formulaire ou à un ensemble de données signables dans un formulaire. La collection SignatureObject implémente les propriétés qui peuvent servir à récupérer les informations sur la signature numérique. La méthode Sign permet d'écrire le bloc de signature numérique XML et de calculer sa valeur de hachage cryptographique. |
|
Représente le certificat numérique X.509 utilisé pour créer la signature. |
Utilisation de signatures numériques par programme
Le modèle objet de l'espace de noms Microsoft.Office.InfoPath fournit les membres qui permettent d'interagir avec les signatures numériques par programmation. Plus spécifiquement, les formulaires entièrement fiables peuvent ajouter des informations personnalisées au bloc de signature avant sa validation, selon la séquence suivante :
L'utilisateur choisit d'ajouter une signature numérique à un formulaire.
La boîte de dialogue Signatures numériques s'affiche, l'utilisateur clique sur Ajouter, puis il sélectionne les données à signer.
L'événement Sign des données sélectionnées, représentées par l'objet SignedDataBlock, est déclenché et la méthode Sign de SignedDataBlock et la méthode CreateSignature de la collection SignatureCollection s'exécutent.
Les actions personnalisées facultatives sont exécutées.
La méthode Sign de Signature s'exécute.
La boîte de dialogue Signature s'affiche pour vous permettre d'entrer un nom (ou de sélectionner une image de signature), de sélectionner un certificat de signature et d'entrer des commentaires.
Lorsque vous cliquez sur le bouton Signer, la signature est ajoutée à la collection de signatures du formulaire et les informations de non-répudiation sont capturées et enregistrées avec la signature (qui peut être affichée plus tard en cliquant sur Afficher le formulaire signé dans la boîte de dialogue Signatures numériques, puis en cliquant sur Voir les informations complémentaires rassemblées sur les signatures).
L'exemple suivant appelle la méthode Sign lorsque l'utilisateur signe les données sélectionnées et contre-signe la signature avec une valeur de cachet de date récupérée à partir d'un service de cachet de date approuvé.
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