You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取PEM格式X509 CRL中的吊销证书序列号(C#/命令行)

提取PEM格式CRL中吊销证书序列号的方案

一、命令行实现(基于OpenSSL)

Linux/macOS 命令

openssl crl -in your_crl.pem -text -noout | grep -E "Serial Number:" | awk '{print $3}'
  • 说明:
    • openssl crl -in your_crl.pem -text -noout:将PEM格式CRL转换为可读文本格式,不输出CRL本身
    • grep -E "Serial Number:":过滤出包含吊销证书序列号的行
    • awk '{print $3}':提取每行中的序列号部分

Windows PowerShell 命令

openssl crl -in your_crl.pem -text -noout | Select-String "Serial Number:" | ForEach-Object { $_.Line.Split()[2] }
  • 说明:
    • Select-String "Serial Number:":匹配包含序列号的行
    • ForEach-Object { $_.Line.Split()[2] }:拆分每行文本并提取序列号

二、C#代码实现

方案1:使用.NET内置类库(无需第三方包)

using System;
using System.Security.Cryptography.X509Certificates;

class CrlSerialExtractor
{
    static void Main(string[] args)
    {
        string crlPath = "your_crl.pem";
        
        // 加载PEM格式CRL
        using var crl = new X509Certificate2Collection();
        crl.ImportFromPemFile(crlPath);
        
        if (crl.Count == 0)
        {
            Console.WriteLine("未加载到有效CRL");
            return;
        }
        
        var x509Crl = (X509CRL)crl[0];
        
        // 遍历所有吊销条目,提取序列号
        foreach (var revokedEntry in x509Crl.RevokedCertificates)
        {
            // 将序列号转换为十六进制字符串(大写)
            string serialHex = BitConverter.ToString(revokedEntry.SerialNumber).Replace("-", "").ToUpper();
            Console.WriteLine(serialHex);
        }
    }
}
  • 说明:
    • 需要.NET 5及以上版本,ImportFromPemFile是.NET 5新增方法
    • X509CRL.RevokedCertificates返回所有吊销证书的条目集合,每个条目包含SerialNumber字节数组,转换为十六进制字符串即可得到对应序列号

方案2:使用BouncyCastle库

先通过NuGet安装BouncyCastle.Cryptography包,然后使用以下代码:

using System;
using Org.BouncyCastle.X509;
using System.IO;

class BouncyCastleCrlExtractor
{
    static void Main(string[] args)
    {
        string crlPath = "your_crl.pem";
        
        // 读取PEM文件内容
        string pemContent = File.ReadAllText(crlPath);
        
        // 解析PEM格式CRL
        var crlParser = new X509CrlParser();
        X509Crl crl = crlParser.ReadCrl(pemContent);
        
        // 获取所有吊销条目
        var revokedEntries = crl.GetRevokedCertificates();
        
        foreach (X509CrlEntry entry in revokedEntries)
        {
            // 提取序列号并转换为十六进制字符串
            string serialHex = entry.SerialNumber.ToString(16).ToUpper();
            Console.WriteLine(serialHex);
        }
    }
}
  • 说明:
    • X509Crl.GetRevokedCertificates()方法可直接获取所有吊销证书条目集合,之前你可能没注意到这个方法
    • 每个X509CrlEntry的SerialNumber是BigInteger类型,调用ToString(16)即可得到十六进制序列号

内容的提问来源于stack exchange,提问作者Claus Appel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:05:24