2011-12-31 68 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