擴充處理常式

X.509 憑證格式第 3 版開始,憑證可能包含憑證延伸模組。 (如需 X.509 憑證的內容,請參閱 Certificate Properties.) 這些延伸模組指出其他資訊。 例如,延伸模組可以指出其他主體識別資訊,也可以指出金鑰使用方式資訊,以指定 (工作,例如可以使用金鑰的簽章或加密) 。 已定義一組標準延伸模組以供應用程式使用,而且也可以自訂延伸模組。

每個延伸模組都有相關聯的物件識別碼字串,可識別其他資訊的類型,以及包含這項資訊的資料結構。 例如,金鑰使用物件識別碼是 「2.5.29.15」,表示金鑰使用方式資訊。 其相關聯的資料結構是 CRYPT_BIT_BLOB (位欄位,) 指定索引鍵的使用方式。

在發行延伸模組之前,可以將延伸模組新增至憑證。 發行憑證時,任何已啟用的延伸模組都是憑證的一部分。 如果延伸模組標示為重要,則必須使用應用程式來得知其用法,而且應用程式必須遵守延伸模組的意圖或值。 憑證服務允許透過 ICertAdminICertServerPolicy提供的方法,在未發行的憑證上設定延伸模組。 如需憑證延伸模組的詳細資訊,請參閱 CryptoAPI 檔中 的CERT_EXTENSION 。 如需一般憑證延伸模組資料結構的相關資訊,請參閱 X.509 憑證延伸模組結構

延伸模組處理常式是一個 COM 物件,提供編碼更複雜的常式,但常用的延伸模組和資料類型,例如 IA5String 或 PrintableString。

具有 DATELONGBSTR 資料類型的延伸模組不需要延伸模組處理常式。 原則模組只會呼叫 ICertServerPolicy::SetCertificateExtension ,並將 Type 參數設定為代表延伸模組資料類型的值:PROPTYPE_DATE、PROPTYPE_LONG或PROPTYPE_STRING。 然後,它會將擴充功能傳遞至伺服器引擎。 接著,伺服器引擎會先執行 抽象語法標記法一 (ASN.1) 編碼,再將延伸模組儲存在憑證中。

不過,具有這些預設類型以外的資料類型的延伸模組,必須在原則模組將它們傳遞至伺服器引擎之前,由延伸模組處理常式編碼的 ASN.1。 當原則模組呼叫 ICertServerPolicy::SetCertificateExtension 以將 ASN.1 編碼延伸模組傳遞至伺服器引擎時,必須將 Type 參數設定為 PROPTYPE_BINARY。 然後,伺服器引擎只會將此編碼延伸模組儲存在憑證中。

預設擴充處理常式Certenc.dll匯出許多 ICertEncodeXXX 介面,而且可由原則模組呼叫。 必要的類型資訊也會包含在平臺軟體發展工具組 (SDK) 中提供的Certencl.dll中。 每個介面都會提供 Encode 方法,以二進位格式將 ASN.1 編碼的憑證延伸模組傳回原則模組。 然後,原則模組可以藉由呼叫 ICertServerPolicy::SetCertificateExtension 方法,在憑證中設定擴充功能。

如需詳細資訊,請參閱 撰寫自訂擴充功能處理常式