JavaでのX509証明書の拇印の計算
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();
}
たとえば、 baeldung.pem という名前のX509証明書ファイルがある場合、上記の方法を使用して、その指紋を簡単に印刷できます。
X509Certificate certObject = getCertObject("baeldung.pem");
System.out.println(getThumbprint(certObject));
結果は次のようになります。
c9fa9f008655c8401ad27e213b985804854d928c
3. ApacheCommonsCodecを使用する
Apache CommonsCodecライブラリの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証明書の指紋を計算する2つの方法を学びました。
いつものように、この記事のサンプルコードは、GitHubのにあります。