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

2023-11-26

我在谷歌上到处搜索这个问题,并在其他社区询问,我不断被转发到讨论该规范的 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,我刚刚给出了一个示例

这只是一个基本示例,可让您抢占先机

Update

我找到了这个示例类来检查证书,它还使用证书的CA和证书链颁发的CRL进行验证,因此您也不需要提供CRL url

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中检查 X509 证书是否已被吊销? 的相关文章

随机推荐