Messaggio SignedCms

CMS/PKCS #7 include la classe SignedCms che consente di firmare digitalmente i messaggi.

Firmare digitalmente un messaggio significa proteggerlo applicando servizi di protezione denominati autenticazione delle entità e integrità dei dati. L'autenticazione delle entità garantisce, con un grado di probabilità elevato, che un'entità che dichiara di essere l'autore o il mittente di un messaggio sia effettivamente tale. L'entità può essere un utente, un'applicazione software o qualsiasi altra origine con un'identità univoca.

L'integrità dei dati garantisce, con un grado di probabilità elevato, che il messaggio stesso non sia stato alterato in alcun modo e che non venga eliminato o duplicato.

Utilizzare la classe SignedCms per applicare a un messaggio uno o entrambi i servizi di protezione. Utilizzare questa classe per verificare, con un grado di probabilità elevato, l'autenticità di un mittente o autore di un messaggio oppure per verificare che il messaggio non sia stato modificato durante l'archiviazione, il transito o in entrambi i casi.

La posta elettronica che utilizza lo standard di protezione S/MIME rappresenta un esempio di implementazione della classe SignedCms a scopo di protezione. Oltre ad altri servizi di protezione, S/MIME specifica la capacità di verificare l'autenticità del mittente di un messaggio di posta elettronica nonché l'integrità del messaggio stesso.

È possibile applicare più firme a un messaggio . Questa capacità, ad esempio, può essere utile per le applicazioni di creazione e lettura di documenti. Con il supporto di più firme di CMS/PKCS #7, se un documento è stato scritto da più autori, l'applicazione può consentire a ognuno di firmarlo. Può inoltre permettere al lettore del documento di verificare che gli autori dichiarati sono quelli effettivi e che il documento non è stato modificato da quando è stato firmato.

Utilizzare uno dei metodi ComputeSignature della classe SignedCms per elaborare la firma di un messaggio. Con il metodo System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(System.Security.Cryptography.Pkcs.CmsSigner), l'applicazione deve innanzitutto impostare le caratteristiche del firmatario del messaggio costruendo un oggetto CmsSigner. La classe CmsSigner archivia il certificato X509 del firmatario insieme ad altre proprietà. Il metodo System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature visualizza una finestra di dialogo per consentire all'utente di selezionare il certificato del firmatario appropriato.

Nella proprietà System.Security.Cryptography.Pkcs.CmsSigner.Certificates può essere inclusa, completamente o in parte, una catena di certificati di un firmatario. Impostare la proprietà System.Security.Cryptography.Pkcs.CmsSigner.IncludeOption in modo che influisca sulla parte della catena di certificati inclusa.

Un messaggio SignedCms può essere non separato o separato. La proprietà booleana System.Security.Cryptography.Pkcs.SignedCms.Detached determina se il messaggio è separato. Un messaggio SignedCms non separato include il messaggio firmato. Un messaggio SignedCms separato non include il messaggio firmato, ma contiene tutte le altre proprietà del messaggio, ad esempio firme e attributi. Un esempio di applicazione in cui utilizzare un messaggio SignedCms separato è un'applicazione di lettura documenti. In questo caso, può non essere opportuno archiviare un documento firmato di grandi dimensioni anche nel messaggio SignedCms, oltre che nel percorso di archiviazione principale. È probabile che le applicazioni che firmano contenuto di grandi dimensioni utilizzino messaggi SignedCms separati.

CMS/PKCS #7 supporta le controfirme. Una controfirma è una firma digitale di un'altra firma digitale. In quanto tale, assicura solo l'autenticità della firma, non quella del contenuto del messaggio. Una firma digitale può essere controfirmata da più controfirmatari. CMS/PKCS #7 tuttavia supporta solo un livello di controfirma. Una controfirma non può essere controfirmata. Un esempio di applicazioni che utilizzano le controfirme è rappresentato dai servizi notarili digitali.

Utilizzare uno dei metodi ComputeCounterSignature della classe SignerInfo per elaborare una controfirma. La proprietà System.Security.Cryptography.Pkcs.SignedCms.SignerInfos è un insieme di oggetti SignerInfo risultante dalla firma di un messaggio. I metodi ComputeCounterSignature operano in modo analogo ai metodi ComputeSignature della classe SignedCms.

A un messaggio SignedCms possono essere associati attributi specifici per la firma. Tali attributi possono essere firmati o non firmati.

Per inserire nel messaggio gli attributi firmati è necessario impostarli nella proprietà System.Security.Cryptography.Pkcs.CmsSigner.SignedAttributes del firmatario appropriato. Quando viene elaborata una firma per il firmatario, gli attributi firmati vengono firmati insieme al contenuto interno nella proprietà System.Security.Cryptography.Pkcs.SignedCms.ContentInfo. Gli attributi firmati sono disponibili dopo la firma del messaggio nella proprietà System.Security.Cryptography.Pkcs.SignerInfo.SignedAttributes per il firmatario applicabile dalla proprietà System.Security.Cryptography.Pkcs.SignedCms.SignerInfos. Un esempio di attributo firmato è l'attributo dell'indicazione temporale relativa al momento della firma Pkcs9SigningTime. Questo attributo contiene l'ora in cui il messaggio è stato firmato.

Per inserire nel messaggio gli attributi non firmati è necessario impostarli nella proprietà System.Security.Cryptography.Pkcs.CmsSigner.UnsignedAttributes del firmatario appropriato. Poiché questi attributi non sono firmati, non è possibile supporre che siano autentici o integri. Gli attributi non firmati sono disponibili dopo la firma del messaggio nella proprietà System.Security.Cryptography.Pkcs.SignerInfo.UnsignedAttributes per il firmatario applicabile dalla proprietà System.Security.Cryptography.Pkcs.SignedCms.SignerInfos. Un esempio di attributo non firmato utilizzato internamente da CMS/PKCS #7 è una controfirma. Poiché si tratta già di un tipo di firma, non è necessario firmare nuovamente il messaggio. Un altro esempio di attributo non firmato è la descrizione di un documento, disponibile nella classe Pkcs9DocumentDescription.

Utilizzare uno dei metodi CheckSignature della classe SignedCms per verificare le firme, le controfirme e gli attributi firmati del messaggio. Il messaggio SignedCms contiene i certificati dei firmatari necessari per la verifica. La verifica della firma può convalidare o meno i certificati dei firmatari, in base al valore del parametro verifySignatureOnly per questi metodi.

Per verificare un messaggio SignedCms separato, associare innanzitutto il contenuto al messaggio SignedCms. A tale scopo, costruire un oggetto ContentInfo con il contenuto del messaggio. Utilizzarlo per costruire un oggetto SignedCms tramite, ad esempio, il costruttore SignedCms. Impostare il secondo parametro su true per indicare che il messaggio è separato. Decodificare il messaggio SignedCms codificato da verificare utilizzando il metodo Decode. Controllare infine la firma, come illustrato in precedenza.

Per esempi di codice in cui vengono utilizzati messaggi SignedCms, vedere Utilizzo di System.Security.Cryptography.Pkcs.

Vedere anche

Attività

Procedura: firmare messaggi da parte di un firmatario
Procedura: firmare un messaggio da parte di più firmatari
Procedura: controfirmare un messaggio

Riferimenti

CmsSigner
SignedCms
SignerInfo

Concetti

Procedura: firmare e proteggere digitalmente un messaggio
Tipi di messaggi CMS/PKCS #7

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.