使用Java计算X509证书的指纹

2023/07/02

1. 概述

证书的指纹是证书的唯一标识符,它不是证书的一部分,但它是从中计算出来的。

在这个简短的教程中,我们将了解如何使用Java计算X509证书的指纹。

2. 使用纯Java

首先,让我们从我们的证书文件中获取一个X509Certificate对象:

public static X509Certificate getCertObject(String filePath) throws IOException, CertificateException {
    try (FileInputStream is = new FileInputStream(filePath)) {
        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        return (X509Certificate) certificateFactory.generateCertificate(is);
    }
}

接下来,让我们从这个对象中获取指纹:

private static String getThumbprint(X509Certificate cert) throws NoSuchAlgorithmException, CertificateEncodingException {
    MessageDigest md = MessageDigest.getInstance("SHA-1");
    md.update(cert.getEncoded());
    return DatatypeConverter.printHexBinary(md.digest()).toLowerCase();
}

例如,如果我们有一个名为tuyucheng.pem的X509证书文件,我们可以使用上述方法轻松打印其指纹:

X509Certificate certObject = getCertObject("tuyucheng.pem");
System.out.println(getThumbprint(certObject));

结果将类似于:

c9fa9f008655c8401ad27e213b985804854d928c

3. 使用Apache Commons Codec

我们还可以使用Apache Commons Codec库中的DigestUtils类来实现相同的目标。

让我们在pom.xml文件中添加一个依赖项:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

现在,我们只需使用sha1Hex()方法从X509Certificate对象中获取指纹:

DigestUtils.sha1Hex(certObject.getEncoded());

4. 总结

在这个快速教程中,我们学习了两种在Java中计算X509证书指纹的方法。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章