0

我已连接到 MS PKI 证书吊销列表分发点并获得了 CRL

在不使用第三方库的情况下从 CRL 中提取序列号列表的最直接方法是什么?

4

1 回答 1

0

您必须使用非托管 CryptoAPI 函数(当然,通过 p/invoke)展开 CRL。通常,您必须逐步执行以下高级操作:

  1. CertCreateCRLContext -- 这个函数将返回一个指向 CRL_CONTEXT 结构的指针。
  2. 使用Marshal.PtrToStructure.NET 方法将结构pCrlInfo指针转换CRL_CONTEXTCRL_INFO结构。
  3. rgCRLEntry是一个指针数组(数组大小由 的cCRLEntry成员决定CRL_INFO)。
  4. 通过将起始指针增加结构的大小来迭代此数组CRL_ENTRY
  5. SerialNumber的成员CRL_ENTRY是一个字节数组。您可以直接使用Marshal.Copy(IntPtr, Byte[], Int32, Int32)方法将非托管数组复制到托管。这会给你序列号。对每个 CRL 条目重复步骤 4-5。

完成后不要忘记CRL_CONTEXT通过调用CertFreeCRLContext函数释放指向结构的指针,以防止内存泄漏。

于 2016-12-18T13:52:30.743 回答