Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

SignedCms-Nachricht

CMS/PKCS #7 stellt die SignedCms-Klasse zum digitalen Signieren von Nachrichten zur Verfügung.

Durch digitales Signieren einer Nachricht wird diese geschützt, indem die als Authentifizierung von Entitäten und Integrität von Daten bezeichneten Sicherheitsdienste angewendet werden. Entitätsauthentifizierung bietet eine hohe Wahrscheinlichkeit, dass eine Entität, die angibt, der Autor oder Sender einer Nachricht zu sein, dies auch tatsächlich ist. Die Entität kann eine Person, eine Softwareanwendung oder eine andere Quelle mit eindeutiger Identität sein.

Datenintegrität bietet eine hohe Wahrscheinlichkeit, dass die Nachricht nicht auf irgendeine Weise geändert wurde. Hierzu zählt auch das Löschen oder Duplizieren von Nachrichtenteilen.

Verwenden Sie die SignedCms-Klasse, um entweder einen dieser Sicherheitsdienste oder beide auf eine Nachricht anzuwenden. Verwenden Sie diese Klasse, wenn Sie mit dem Anspruch hoher Wahrscheinlichkeit überprüfen möchten, ob ein Nachrichtensender oder -autor echt ist oder ob die Nachricht im Speicher bzw. während der Übertragung geändert wurde.

Eine E-Mail-Anwendung, die den S/MIME-Sicherheitsstandard verwendet, ist ein sinnvolles Verwendungsbeispiel für die SignedCms-Klasse, um Sicherheit für E-Mail-Nachrichten zu bieten. Zusätzlich zu anderen Sicherheitsdiensten bietet S/MIME die Möglichkeit, sowohl die Authentizität des Senders einer E-Mail-Nachricht als auch die Integrität der Nachricht selbst zu überprüfen.

Auf eine Nachricht können mehrere Signaturen angewendet werden. Diese Funktion ist z. B. für eine Anwendung zum Erstellen und Lesen von Dokumenten sinnvoll. Da CMS/PKCS #7 mehrere Signaturen unterstützt, können in der Anwendung mehrere Autoren das Dokument signieren, an dem sie beteiligt waren. Außerdem kann ein Leser des Dokuments überprüfen, ob die angegebenen Autoren tatsächlich die Autoren des Dokuments sind und ob das Dokument nach der Signierung nicht mehr geändert wurde.

Verwenden Sie eine der ComputeSignature-Methoden der SignedCms-Klasse, um eine Nachrichtensignatur zu berechnen. Die System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(System.Security.Cryptography.Pkcs.CmsSigner)-Methode erfordert, dass die Anwendung zuerst die Merkmale des Signaturgebers durch Erstellen eines CmsSigner-Objekts festlegt. Die CmsSigner-Klasse speichert das X509-Zertifikat des Signaturgebers zusätzlich zu anderen Eigenschaften. Die System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature-Methode zeigt ein Dialogfeld an, in dem der Benutzer das entsprechende Zertifikat des Signaturgebers auswählen kann.

Eine Zertifikatkette des Signaturgebers kann vollständig oder teilweise in die System.Security.Cryptography.Pkcs.CmsSigner.Certificates-Eigenschaft eingefügt werden. Legen Sie die System.Security.Cryptography.Pkcs.CmsSigner.IncludeOption-Eigenschaft fest, um anzugeben, welche Teile der Zertifikatkette eingefügt werden sollen.

Eine SignedCms-Nachricht kann entweder nicht getrennt oder getrennt sein. Die boolesche System.Security.Cryptography.Pkcs.SignedCms.Detached-Eigenschaft bestimmt, ob die Nachricht getrennt ist. Eine nicht getrennte SignedCms-Nachricht enthält die signierte Nachricht. Eine getrennte SignedCms-Nachricht enthält nicht die signierte Nachricht, sondern alle Eigenschaften der Nachricht, z. B. Signaturen und Attribute. Ein mögliches Verwendungsbeispiel für eine Anwendung, in der eine getrennte SignedCms-Nachricht verwendet wird, ist z. B. eine Anwendung zum Lesen von Dokumenten. In diesem Fall ist es möglicherweise unerwünscht, den Speicherplatz eines umfangreichen signierten Dokuments zu verdoppeln, indem es zusätzlich zum primären Speicherort in der SignedCms-Nachricht gespeichert wird. Anwendungen, in denen umfangreiche Inhalte signiert werden, verwenden in der Regel getrennte SignedCms-Nachrichten.

CMS/PKCS #7 unterstützt Gegensignaturen. Eine Gegensignatur ist eine digitale Signatur einer anderen digitalen Signatur. Die Gegensignatur bestätigt demnach nur die Authentizität der Signatur einer Nachricht, nicht aber des Nachrichteninhalts. Eine digitale Signatur kann von mehreren Gegenzeichnern gegengezeichnet werden. CMS/PKCS #7 unterstützt jedoch nur eine Gegensignaturebene. Eine Gegensignatur kann demnach nicht gegengezeichnet werden. Ein mögliches Beispiel für eine Anwendung, die Gegensignaturen verwendet, ist ein digitaler Notardienst.

Verwenden Sie eine der ComputeCounterSignature-Methoden der SignerInfo-Klasse, um eine Gegensignatur zu berechnen. Die System.Security.Cryptography.Pkcs.SignedCms.SignerInfos-Eigenschaft ist eine Auflistung des SignerInfo-Objekts, das durch das Signieren einer Nachricht erstellt wird. Die Funktionsweise der ComputeCounterSignature-Methoden ist analog zu der Funktionsweise der ComputeSignature-Methoden in der SignedCms-Klasse.

Eine SignedCms-Nachricht kann über verbundene signaturspezifische Attribute verfügen: Diese Attribute können signiert oder unsigniert sein.

Signierte Attribute werden in die Nachricht eingefügt, indem sie in der System.Security.Cryptography.Pkcs.CmsSigner.SignedAttributes-Eigenschaft des entsprechenden Signaturgebers festgelegt werden. Wenn eine Signatur für diesen Signaturgeber berechnet wird, werden die signierten Attribute zusammen mit dem inneren Inhalt in der System.Security.Cryptography.Pkcs.SignedCms.ContentInfo-Eigenschaft signiert. Die signierten Attribute sind für den entsprechenden Signaturgeber in der System.Security.Cryptography.Pkcs.SignedCms.SignerInfos-Eigenschaft verfügbar, nachdem die Nachricht in der System.Security.Cryptography.Pkcs.SignerInfo.SignedAttributes-Eigenschaft signiert wurde. Ein sinnvolles Beispiel für ein signiertes Attribut ist das Pkcs9SigningTime-Attribut für den Signaturzeitpunkt. Dieses Attribut enthält den Zeitpunkt, zu dem die Nachricht signiert wurde.

Unsignierte Attribute werden in die Nachricht eingefügt, indem sie in der System.Security.Cryptography.Pkcs.CmsSigner.UnsignedAttributes-Eigenschaft des entsprechenden Signaturgebers festgelegt werden. Diese Attribute werden nicht signiert. Es kann daher nicht davon ausgegangen werden, dass sie über Authentizität und Datenintegrität verfügen. Die unsignierten Attribute sind für den entsprechenden Signaturgeber in der System.Security.Cryptography.Pkcs.SignedCms.SignerInfos-Eigenschaft verfügbar, nachdem die Nachricht in der System.Security.Cryptography.Pkcs.SignerInfo.UnsignedAttributes-Eigenschaft signiert wurde. Ein Beispiel für ein unsigniertes Attribut, das intern von CMS/PKCS #7 verwendet wird, ist eine Gegensignatur. Da es sich hierbei bereits um einen Signaturtyp handelt, muss sie nicht erneut signiert werden. Ein weiteres Beispiel für ein Attribut, das möglicherweise unsigniert bleiben kann, ist eine in der Pkcs9DocumentDescription-Klasse verfügbare Dokumentbeschreibung.

Verwenden Sie eine der CheckSignature-Methoden der SignedCms-Klasse, um die Signaturen, Gegensignaturen und signierten Attribute einer Nachricht zu überprüfen. Die SignedCms-Nachricht enthält die Zertifikate des Signaturgebers, die für die Überprüfung erforderlich sind. Die Signaturüberprüfung kann die Zertifikate der Signaturgeber entweder als echt bestätigen oder nicht. Dies bestimmt der Wert des verifySignatureOnly-Parameters dieser Methoden.

Um eine getrennte SignedCms-Nachricht zu überprüfen, verbinden Sie zunächst den Inhalt der Nachricht mit der SignedCms-Nachricht. Erstellen Sie hierzu ein ContentInfo-Objekt mit dem Nachrichteninhalt. Verwenden Sie dieses Objekt zum Erstellen eines SignedCms-Objekts, indem Sie z. B. den SignedCms-Konstruktor verwenden. Legen Sie den zweiten Parameter auf true fest, um anzugeben, dass die Nachricht getrennt ist. Decodieren Sie die zu überprüfende codierte SignedCms-Nachricht. Verwenden Sie hierzu die Decode-Methode. Überprüfen Sie anschließend die Signatur wie oben beschrieben.

Eine Reihe von Codebeispielen, die SignedCms-Nachrichten verwenden, finden Sie unter Verwenden von System.Security.Cryptography.Pkcs.

Siehe auch

Anzeigen: