扩展处理程序

X.509 证书格式版本 3 开始,证书可能包含证书扩展。 (有关 X.509 证书的内容,请参阅 证书属性。) 这些扩展指示其他信息。 例如,扩展可以指示其他使用者标识信息,也可以指示密钥使用信息,该信息指定 (的任务,例如可以使用密钥的签名或加密) 。 为应用程序使用定义了一组标准扩展,还可以自定义扩展。

每个扩展都有一个关联的对象标识符字符串,用于标识附加信息的类型和包含此信息的数据结构。 例如,密钥使用对象标识符为“2.5.29.15”,指示密钥用法信息。 其关联的数据结构是一个 CRYPT_BIT_BLOB (位域,) 指定密钥的使用方式。

在颁发证书之前,可以将扩展添加到证书。 颁发证书时,任何已启用的扩展都是证书的一部分。 如果扩展标记为“关键”,则 using 应用程序必须知道其用法,并且应用程序必须遵循扩展的意向或值。 证书服务允许通过 ICertAdminICertServerPolicy 提供的方法在未颁发的证书上设置扩展。 有关证书扩展的详细信息,请参阅 CryptoAPI 文档中的 CERT_EXTENSION 。 有关常见证书扩展数据结构的信息,请参阅 X.509 证书扩展结构

扩展处理程序是一个 COM 对象,它提供用于编码较复杂但常用的扩展和数据类型(如 IA5String 或 PrintableString)的例程。

数据类型为 DATELONGBSTR 的扩展不需要扩展处理程序。 策略模块只需调用 ICertServerPolicy::SetCertificateExtension ,并将 Type 参数设置为表示扩展数据类型的值:PROPTYPE_DATE、PROPTYPE_LONG或PROPTYPE_STRING。 然后,它将扩展传递给服务器引擎。 服务器引擎依次执行 抽象语法表示法 One (ASN.1) 编码,然后再将扩展存储在证书中。

但是,在策略模块将数据类型传递给服务器引擎之前,具有这些默认类型以外的数据类型的扩展必须由扩展处理程序进行 ASN.1 编码。 当策略模块调用 ICertServerPolicy::SetCertificateExtension 将 ASN.1 编码的扩展传递给服务器引擎时,它必须将 Type 参数设置为PROPTYPE_BINARY。 然后,服务器引擎只需将此编码扩展存储在证书中。

默认扩展处理程序Certenc.dll导出多个 ICertEncodeXXX 接口,可由策略模块调用。 所需的类型信息也包含在平台软件开发工具包 (SDK) 中提供的Certencl.dll中。 每个接口都提供 一个 Encode 方法,该方法以二进制格式将 ASN.1 编码的证书扩展返回到策略模块。 然后,策略模块可以通过调用 ICertServerPolicy::SetCertificateExtension 方法在证书中设置扩展。

有关详细信息,请参阅 编写自定义扩展处理程序