Procedura: Utilizzare le firme digitali
Il modello a oggetti dello spazio dei nomi Microsoft.Office.InfoPath include caratteristiche per l'utilizzo di firme digitali a livello di programmazione.
Caratteristiche per le firme digitali
Le caratteristiche per le firme digitali disponibili in InfoPath consentono di eseguire le operazioni seguenti:
Attivare le firme per l'intero modulo o per set di dati specifici nel modulo che possono essere firmati separatamente.
Specificare, per ogni blocco di dati set di dati che può essere firmato, se sono consentite più firme o una sola firma e le relative relazioni. È ad esempio possibile impostare firme parallele (co-firma) o firme separate in cui ogni nuova firma controfirma tutte le firme precedenti.
Specificare un messaggio da visualizzare agli utenti quando firmano il modulo.
Inserire e visualizzare una firma nel documento.
Visualizzare le informazioni di non ripudio verificabili aggiunte a ogni firma per una maggiore protezione. Queste informazioni aggiuntive, comprendenti una visualizzazione del modulo presentato a ogni firmatario, fanno parte della firma e se vengono rimosse invalidano la firma. In qualsiasi momento è possibile richiamare questi dati facendo clic sulla firma nel modulo per visualizzare la finestra di dialogo Verifica firma digitale.
Utilizzare le firme digitali tramite un modello a oggetti. Aggiungere informazioni personalizzate al blocco di firma in moduli completamente attendibili tramite il modello a oggetti per le firme digitali.
Informazioni generali sul modello a oggetti per le firme digitali
Evento Sign
Il modello a oggetti per le firme digitali include l'evento seguente.
Nome | Descrizione |
---|---|
Generato dopo la selezione per la firma di un blocco di dati firmabile. È possibile utilizzare questo evento per intervenire sui dati archiviati con la firma digitale. Ad esempio, si possono aggiungere dati da un server timestamp attendibile oppure aggiungere una controfirma della transazione sul lato server. È inoltre possibile utilizzare questo evento per una firma di blocco se l'utente corrente non è incluso in un particolare gruppo. |
Oggetto SignEventArgs
È possibile utilizzare un gestore eventi per l'evento Sign con l'oggetto evento SignEventArgs, che include le proprietà seguenti.
Nome | Descrizione |
---|---|
Ottiene il blocco di dati firmabile che ha generato l'evento Sign. |
|
Ottiene o imposta la visualizzazione della finestra di dialogo Firme digitali. |
![]() |
---|
Nel modello a oggetti con codice gestito Microsoft.Office.Interop.InfoPath.SemiTrust fornito con InfoPath 2003, l'oggetto evento SignEvent per l'evento OnSign include una proprietà XDocument per l'accesso all'oggetto XDocument del modulo associato all'evento. Non è necessario per i modelli di modulo creati con InfoPath 2007 utilizzando il modello a oggetti Microsoft.Office.InfoPath, in quanto i membri del modello a oggetti della classe XmlForm sono accessibili nel codice del modulo tramite la parola chiave this in C# o Me in Visual Basic. Ad esempio, per accedere alla proprietà Signed della classe XmlForm al fine di determinare se un modulo è firmato, è possibile digitare |
Insiemi e oggetti
Il modello a oggetti per le firme digitali include gli insiemi seguenti.
Nome | Descrizione |
---|---|
Insieme di oggetti SignedDataBlock nel modello di modulo definito in fase di progettazione in modalità progettazione di InfoPath. L'insieme SignedDataBlockCollection implementa proprietà che possono essere utilizzate per accedere agli oggetti SignedDataBlock associati a un modulo. L'oggetto SignedDataBlockCollection associato a un modulo è accessibile tramite la proprietà SignedDataBlocks della classe XmlForm. |
|
Contiene un insieme di oggetti Signature per ogni oggetto SignedDataBlock del modulo. La classe SignatureCollection implementa proprietà e un metodo che possono essere utilizzati per accedere agli oggetti Signature associati e creare una firma. L'oggetto SignatureCollection associato a un oggetto SignedDataBlock è accessibile tramite la proprietà Signatures. Quando si utilizza il metodo CreateSignature della classe SignatureCollection, tenere presente che la firma non viene apposta fino a quando non viene chiamato il metodo Sign per l'oggetto Signature. Questi metodi possono essere chiamati solo dal gestore eventi Sign di un modello di modulo completamente attendibile. |
Il modello a oggetti per le firme digitali include gli oggetti seguenti.
Nome | Descrizione |
---|---|
Rappresenta un blocco di dati firmabile in un modulo. L'oggetto SignedDataBlock include varie proprietà e un metodo che possono essere utilizzati per interagire a livello di programmazione con un blocco di dati firmabile. |
|
Rappresenta una firma digitale che è stata aggiunta a un modulo o un blocco di dati firmabile in un modulo. L'insieme SignatureObject implementa proprietà che consentono di recuperare informazioni sulla firma digitale e il metodo Sign per la scrittura del blocco di firma digitale XML e il calcolo del valore dell'hash crittografico. |
|
Rappresenta il certificato digitale X.509 utilizzato per creare la firma. |
Utilizzo di firme digitali a livello di programmazione
Il modello a oggetti Microsoft.Office.InfoPath dello spazio dei nomi include membri che consentono l'interazione con le firme digitali a livello di programmazione. In particolare, i moduli completamente attendibili possono aggiungere informazioni personalizzate al blocco di firma prima del relativo commit, in base alla sequenza temporale seguente:
L'utente decide di aggiungere una firma digitale a un modulo.
Viene visualizzata la finestra di dialogo Firme digitali, in cui l'utente fa clic su Aggiungi e quindi seleziona i dati da firmare.
Viene generato l'evento Sign per i dati selezionati rappresentati dall'oggetto SignedDataBlock e vengono eseguiti il metodo Sign dell'oggetto SignedDataBlock e il metodo CreateSignature dell'insieme SignatureCollection.
Vengono eseguite eventuali azioni facoltative personalizzate.
Viene eseguito il metodo Sign dell'oggetto Signature.
Viene visualizzata la finestra di dialogo Firma per digitare un nome o selezionare un'immagine della firma, selezionare un certificato da utilizzare per la firma e immettere commenti.
Quando si fa clic sul pulsante Firma, la firma viene aggiunta all'insieme di firme per il modulo e le informazioni di non ripudio vengono acquisite e salvate con la firma. Per visualizzarle in seguito, è possibile fare clic su Visualizza modulo firmato nella finestra di dialogo Firme digitali e quindi su Visualizza le informazioni aggiuntive sulla firma raccolte.
Nell'esempio seguente viene richiamato il metodo Sign quando l'utente firma i dati selezionati e applica una controfirma con un valore timestamp recuperato da un servizio di aggiunta timestamp attendibile.
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