首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已撤销的X509Certificate

已撤销的X509Certificate
EN

Stack Overflow用户
提问于 2012-01-31 04:08:41
回答 8查看 6.7K关注 0票数 1

当X509Certificate被撤销时,我如何以编程方式获取?如果证书被吊销,我可以获得信息,但我需要获得何时被吊销,我认为CRL列表包含该信息,但有人能告诉我如何读取该信息吗?

EN

回答 8

Stack Overflow用户

发布于 2012-01-31 14:09:54

通过(a)获得CRL列表并检查证书是否在其中列出,以及(b)向服务器发送OCSP请求以检查该证书,来检查撤销状态。

.NET不允许你这样做。CryptoAPI可能有一些方法来实现这些操作,但最简单的方法是使用第三方库来执行.NET。BouncyCastle声称支持OCSP和CRL,我们的SecureBlackbox提供了对OCSP和CRL的完整支持(客户端和服务器组件都可用),我们还提供了一个组件,它可以通过一个方法调用执行完整的证书验证(包括所有CRL和OCSP检查以及HTTP和LDAP通信。

票数 2
EN

Stack Overflow用户

发布于 2016-12-01 01:40:39

CRL存储为X509Certificate对象的extensions属性中的OID。OID FriendlyName和值是“CRL分发点”和“2.5.29.31”。在证书的扩展中搜索值为2.5.29.31的OID,然后可以解析原始数据并获得分发点。

我找到了以下代码示例here。我在公开签名证书和内部Microsoft CA证书上对它进行了测试;它返回URL或LDAP连接字符串。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace System.Security.Cryptography.X509Certificates
{
    public static class X509Certificate2Extensions
    {
        /// <summary>
        /// Returns an array of CRL distribution points for X509Certificate2 object.
        /// </summary>
        /// <param name="certificate">X509Certificate2 object.</param>
        /// <returns>Array of CRL distribution points.</returns>
        public static string[] GetCrlDistributionPoints(this X509Certificate2 certificate)
        {
            X509Extension ext = certificate.Extensions.Cast<X509Extension>().FirstOrDefault(
                e => e.Oid.Value == "2.5.29.31");

            if (ext == null || ext.RawData == null || ext.RawData.Length < 11)
                return EmptyStrings;

            int prev = -2;
            List<string> items = new List<string>();
            while (prev != -1 && ext.RawData.Length > prev + 1)
            {
                int next = IndexOf(ext.RawData, 0x86, prev == -2 ? 8 : prev + 1);
                if (next == -1)
                {
                    if (prev >= 0)
                    {
                        string item = Encoding.UTF8.GetString(ext.RawData, prev + 2, ext.RawData.Length - (prev + 2));
                        items.Add(item);
                    }

                    break;
                }

                if (prev >= 0 && next > prev)
                {
                    string item = Encoding.UTF8.GetString(ext.RawData, prev + 2, next - (prev + 2));
                    items.Add(item);
                }

                prev = next;
            }

            return items.ToArray();
        }

        static int IndexOf(byte[] instance, byte item, int start)
        {
            for (int i = start, l = instance.Length; i < l; i++)
                if (instance[i] == item)
                    return i;

            return -1;
        }

        static string[] EmptyStrings = new string[0];
    }
}
票数 2
EN

Stack Overflow用户

发布于 2012-05-09 18:17:36

使用x509.h文件中的此API使用openssl 1.0 /或更高版本

X509_CRL_get0_by_cert(X509_CRL *crl,X509_REVOKED **ret,X509 *x);

要检查的证书中的X;

Ret是撤销结构的地址,其中存储了撤销的原因和所有内容

crl就是CRL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9070083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档