2011-12-31 146 views
1

我必须编写一个X.509 openssl证书分析器的Java实现,但我遇到了一个问题:我不知道如何获取sha1以验证证书。 任何人都可以帮我理解我该怎么办?我知道Java中有一种方法getTBSCertificate(),但我必须为了我的目的而重写它。从Java中的X.509 openssl证书中提取sha1

+1

看看这里:http://stackoverflow.com/questions/143523/x509-certificate-parsing-libraries-for-java – 2011-12-31 10:54:36

回答

5

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

至于1; getEncoded()从java.security.cert.Certificate获取。

至于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(); 
    } 

应该做的伎俩。该输出与java keytool的输出相匹配。

Dw。

+0

这是正确的指纹确实。我的猜测是,这个问题也许是关于验证签名......这里有几个最近的相关问题:[关于指纹](http://security.stackexchange.com/q/14330/2435)和[关于签名(和CA)](http://stackoverflow.com/q/10411433/372643)。 – Bruno 2012-05-08 16:34:57