从Java中的X.509 openssl证书中提取sha1

4nf*_*3rt 1 java x509certificate x509

我必须编写一个X.509 openssl证书解析器的Java实现,但我有一个问题:我不知道如何获取sha1来验证证书.任何人都可以帮我理解我应该做什么吗?我知道getTBSCertificate()Java 中有一个方法,但我必须为了我的目的重写它.

Dir*_*lik 5

假设你的意思是sha1,它通常在浏览器和操作系统工具中显示为"指纹" - 你需要1)原始证书作为DER; 然后2)sha1它和3)将其转换为通常的两位数十六进制/冒号分隔的字符串.

至于1; 来自java.security.cert.Certificate的getEncoded()可以帮到你.

至于2:MessageDigest具有该功能.

至于3:我会把它留给你:)

... someFoo(X509Certificate cert) {
    MessageDigest sha1 = MessageDigest.getInstance("SHA1");
    System.out.println("  Subject " + cert.getSubjectDN());
    System.out.println("   Issuer  " + cert.getIssuerDN());
    sha1.update(cert.getEncoded());
    System.out.println("   sha1    " + toHexString(sha1.digest()));
    System.out.println();
  }
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.此输出与java keytool的输出匹配.

DW.