【Java】SSL証明書の拇印/フィンガープリントを生成するには...

サンプル

拇印/フィンガープリント : thumbprint/Fingerprint
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.security.cert.CertificateEncodingException;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;
import javax.xml.bind.DatatypeConverter;

public class Ssl {

  public static void main(String[] args) {
    try {
      X509Certificate certificate = loadCertificate("./etc/cacert.crt");
      String thumbprint = getThumbprint(certificate);
      System.out.println("Thumbprint : " + thumbprint);
      System.out.println("Done...");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  
  // 証明書ファイル→X509Certificate を変換
  private static X509Certificate loadCertificate(String certificatePath)
      throws FileNotFoundException, IOException, CertificateException {
    try (FileInputStream inputStream = new FileInputStream(new File(certificatePath))) {
      X509Certificate returnValue = X509Certificate.getInstance(inputStream);
      returnValue.checkValidity();
      return returnValue;
    }
  }

  private static String getThumbprint(X509Certificate certificate) 
      throws NoSuchAlgorithmException, CertificateEncodingException {
      MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
      byte[] der = certificate.getEncoded();
      messageDigest.update(der);
      return toHex(messageDigest.digest()).toLowerCase();
  }
  
  private static String toHex(byte[] byteValues) {
    return DatatypeConverter.printHexBinary(byteValues);
  }
}


関連記事

Javaオブジェクト「X509Certificate」 ⇔ 証明書ファイル 変換処理

https://blogs.yahoo.co.jp/dk521123/36989612.html

byte配列⇔16進数文字列 の変換

https://blogs.yahoo.co.jp/dk521123/36555383.html