当前位置: 首页 > 面试题库 >

如何检查X509证书是否已被Java吊销?

颛孙飞
2023-03-14
问题内容

我在各地搜索过Google,并在其他社区中询问过,并且继续前进到讨论该规范的Oracle文档。但是,该文档更多地涵盖了方法的命名以及整个体系结构,实际上并未提出讨论如何实际编写一些代码来检查x509证书是否被撤销的方法。

也许这只是我头上的办法?但是如果有人可以帮助我,我肯定会感激不尽,我已经将头撞在墙上的墙上已经有大约一周的时间了。


问题答案:

每个CA都会发布已撤销的证书列表。此列表包括证书的序列号和吊销日期

要获取证书吊销列表(CRL)的URL,请执行以下步骤

  • 打开证书
  • 转到“详细信息”选项卡,然后在详细信息列表中找到“ CRL分发点”字段

它将向您显示诸如此类的价值

[1] CRL分发点分发点名称:全名:URL = mscrl.microsoft.com / pki / mscorp / crl /
msitwww2.crl URL = crl.microsoft.com / pki / mscorp / crl / msitwww2.crl

因此,在您的代码中,您需要下载这些文件并检查其中的证书序列号,以查看其是否被吊销

在下面的示例代码中找到它

public class CertVerification {


    public static void main(String[] args) throws Exception {

        String certificatePath = "C:\\Users\\user1\\Desktop\\test.cer";

        CertificateFactory cf = CertificateFactory.getInstance("X509");

        X509Certificate certificate = null;
        X509CRLEntry revokedCertificate = null;
        X509CRL crl = null;

        certificate = (X509Certificate) cf.generateCertificate(new FileInputStream(new File(certificatePath)));

        URL url = new URL("http://<someUrl from certificate>.crl");
        URLConnection connection = url.openConnection();

        try(DataInputStream inStream = new DataInputStream(connection.getInputStream())){

            crl = (X509CRL)cf.generateCRL(inStream);
        }

        revokedCertificate = crl.getRevokedCertificate(certificate.getSerialNumber());

        if(revokedCertificate !=null){
            System.out.println("Revoked");
        }
        else{
            System.out.println("Valid");
        }

    }


}

请参见

这些列表会定期更新

您也可以从证书中获取这些吊销URL,我刚刚给出了一个示例

这只是一个入门的基本示例

更新资料

我找到了该示例类来检查证书,它还通过证书的CA和证书链颁发的CRL进行验证,因此您也无需提供CRL URL

https://svn.cesecore.eu/svn/ejbca/branches/Branch_3_2_3_utf8/ejbca/doc/samples/ValidateCertUseCRL.java



 类似资料:
  • 提前谢谢你

  • 问题内容: 我目前正在使用SSL编写网络TCP服务器。在生产中,我们最终将要求客户使用证书进行身份验证。 为了在紧急情况下吊销证书,我们还想建立一个CRL。 我的问题是:Java是否开箱即用地检查CRL(如果提供了证书),还是需要手动实施此类检查? 为了进行测试,我准备了带有CRL设置的证书,但是Java似乎没有尝试对其进行验证(我将其放入本地Web服务器中并且无法访问)。 我仅找到 _com.s

  • 如果这种理解是正确的,那么我希望x509Chain对象能够通过吊销检查,即使检查是在上面文件的2014年3/1/之后的最新吊销列表存在的情况下进行的。不幸的是,结果是验证失败,因为它认为证书已被吊销。 在这种情况下,我是否必须做进一步的测试以查看撤销日期并覆盖结果并忽略它?我是不是做了什么蠢事?我是不是误会了撤销?

  • 问题内容: 我在Java中有一个X509Certificate实例,我需要确定它是CA证书还是用户证书。 谁能提供任何帮助? 提前致谢! 问题答案: 根据我进行的研究,可以通过检查基本约束来检查它!检查API以获取方法的返回结果。 因此,如果该方法返回结果,则可以将证书视为。 我已经用几个(根目录和中间目录)检查了它,它按描述的那样工作。我还用几个用户证书检查了此方法,该方法返回-1作为结果。

  • 一个类似于Iterator中的的方法,在异常抛出和布尔返回行为中(尽管没有与的约定)。 示例: 目标是在客户端代码调用此方法而不消耗流的情况下早期失败。 一个可接受的答案也可以是“没有解决方案存在”,并有充分的理由说明为什么规范不能添加这样的方法(如果有充分的理由的话)。看起来JDK流通常在其终端方法的开头有以下代码段: 因此,对于这些流,实现这样的方法似乎并不困难。

  • 我试图使用Github桌面和git shell从Github进行克隆,但不断出现以下错误: 拉取现有存储库时也会出现同样的问题。 我已经尝试上载在