擴充處理程式
從 X.509 憑證格式版本 3 開始,憑證可能包含憑證延伸模組。 (如需 X.509 憑證的內容,請參閱 憑證屬性。這些延伸模組會指出其他資訊。 例如,延伸模組可以指出其他主體識別資訊,也可以指出密鑰使用資訊,這會指定可使用密鑰的工作(例如簽章或加密)。 已定義一組標準延伸模組以供應用程式使用,而且也可以自定義延伸模組。
每個延伸模組都有相關聯的物件標識符字串,可識別其他信息的類型,以及包含這項信息的數據結構。 例如,密鑰使用物件標識碼是 “2.5.29.15”,表示密鑰使用方式資訊。 其相關聯的數據結構是 CRYPT_BIT_BLOB(bitfield),指定密鑰的使用方式。
延伸模組可以在發行之前新增至憑證。 發行憑證時,任何啟用的延伸模組都是憑證的一部分。 如果延伸模組標示為重要,則其使用必須由using應用程式知道,而且應用程式必須遵守延伸模組的意圖或值。 憑證服務允許透過 ICertAdmin 和 ICertServerPolicy提供的方法,在未核發的憑證上設定延伸模組。 如需憑證延伸模組的詳細資訊,請參閱 CryptoAPI 檔中 CERT_EXTENSION。 如需通用憑證延伸數據結構的詳細資訊,請參閱 X.509 憑證延伸結構。
延伸模組處理程式是一個 COM 物件,可提供編碼更複雜的例程,但常用的擴充功能和數據類型,例如 IA5String 或 PrintableString。
數據類型 DATE、LONG和 BSTR 的擴充功能不需要擴充處理程式。 原則模組只會呼叫 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 中。 每個介面都會提供 編碼 方法,以二進位格式將 ASN.1 編碼的憑證延伸模組傳回給原則模組。 接著,原則模組可以呼叫 ICertServerPolicy::SetCertificateExtension 方法,在憑證中設定延伸模組。
如需詳細資訊,請參閱 撰寫自定義延伸模組處理程式。