CMS/PKCS #7 邮件的组件

CMS/PKCS #7 邮件结构便于在邮件中实现一项或多项安全服务。属性也可以与 CMS/PKCS #7 邮件关联,生成有关该邮件的其他信息。

要保护的数据

CMS/PKCS #7 可以将多项安全服务应用于数据,方法是将其存储在 ContentInfo 对象中。此对象是保护 System.Security.Cryptography.Pkcs 命名空间 SignedCmsEnvelopedCms 中数据的两种主要类的一个属性。ContentInfo 对象可以存储不受保护的数据,也可以封装以前受 CMS/PKCS #7 安全服务保护的数据。通过此封装,允许将嵌套的安全层应用于数据。例如,已进行数字签名的数据即可以进行数字封装。

在 CMS/PKCS #7 邮件中提供的具有新保护层(在 ContentInfo 对象中)的数据称为 CMS/PKCS #7 邮件的“内部内容”。应用该保护后生成的数据称为 CMS/PKCS #7 邮件的“外部内容”。“外部内容”**通过对相应的 CMS/PKCS #7 邮件对象调用 Encode 方法获取。实际上,这意味着调用 System.Security.Cryptography.Pkcs.SignedCms.EncodeSystem.Security.Cryptography.Pkcs.EnvelopedCms.Encode

有关受多项安全服务保护的数据的详细信息,请参阅封装和签名的 CMS/PKCS #7 邮件。有关受多项安全服务保护的数据的代码示例,请参阅如何:签名和封装邮件

属性

CMS/PKCS #7 允许受保护的邮件中包含“属性”**。属性由标识属性类型的对象标识符 (Oid) 和保存属性值的数据组成。这些属性的选择、位置和特征取决于 CMS/PKCS #7 邮件的类型。

SignedCms 邮件可以携带两种签名特定的属性:与邮件内容一起签名的属性以及保持不签名的属性。有关详细信息,请参阅 SignedCms 邮件EnvelopedCms 邮件可以携带保持不加密的属性。有关详细信息,请参阅 EnvelopedCms 邮件

下列属性类包含在 System.Security.Cryptography.Pkcs 命名空间中。有些属性是 CMS/PKCS #7 标准要求的,有些属性在很多应用方案中非常有用:

也可以根据应用程序的需要创建自定义属性。从 Pkcs9AttributeObject 派生自定义属性类。

使用者

CMS/PKCS #7 邮件中的“使用者”**是生成或使用邮件时涉及的实体。根据应用程序的行为,使用者可能会充当多种不同的角色。例如邮件的发件人、作者、签名者、副签署者、收件人或读件人等角色或这些角色的某种组合。使用者可以是人、软件应用程序或其他任何具有唯一标识的实体。在 System.Security.Cryptography.Pkcs 中包含使用者的两个主要类是 CmsSignerCmsRecipient

CMS/PKCS #7 中的使用者使用加密凭据执行操作。通常采用具有关联的私钥的公钥证书形式。使用者通过公钥证书标识和定位。可以通过以下两种方式之一唯一标识该证书。

  • 颁发者可分辨名称以及颁发者特定的证书序列号

  • 使用者密钥标识符

这些标识机制使用 SubjectIdentifierType 枚举表示。CmsSignerCmsRecipient 类中使用的某些构造函数将 SubjectIdentifierType 成员作为输入。

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。