1. Обзор
Отпечаток сертификата (или отпечаток пальца) — это уникальный идентификатор сертификата . Он не является частью сертификата, но рассчитывается на его основе.
В этом кратком руководстве мы увидим, как вычислить отпечаток сертификата X509 в Java .
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();
}
Например, если у нас есть файл сертификата X509 с именем foreach.pem
, мы можем использовать описанные выше методы, чтобы легко напечатать его отпечаток:
X509Certificate certObject = getCertObject("foreach.pem");
System.out.println(getThumbprint(certObject));
Результат будет выглядеть примерно так:
c9fa9f008655c8401ad27e213b985804854d928c
3. Используйте кодек Apache Commons
Мы также можем использовать класс DigestUtils
из библиотеки кодеков Apache Commons для достижения той же цели.
Давайте добавим зависимость в наш файл pom.xml
:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
Теперь мы просто используем метод sha1Hex()
, чтобы получить отпечаток из нашего объекта X509Certificate
:
DigestUtils.sha1Hex(certObject.getEncoded());
4. Вывод
В этом кратком руководстве мы узнали о двух способах вычисления отпечатка сертификата X509 в Java .
Как всегда, пример кода из этой статьи можно найти на GitHub .