2012-12-07 61 views
1

如何在java中顯示證書中的主題詳細信息(DER格式即.cer文件)?例如:電子郵件,國家,名稱或單獨的OID等。在Android中查看證書的詳細信息

從上面的代碼中可以讀取證書。也可以在Android中使用。謝謝GreyBeardedGeek。但爲了更詳細地描述它(如所要求的那樣),如果通過使用方法getSubjectDN()或cert.getSubjectX500Principal()。getname()顯示主題詳細信息,它將顯示整個詳細信息。一些可能被編碼。我相信它是ASN1(不確定)。我需要的是隻提取我需要的信息。有關示例,請參閱我創建的示例證書的代碼輸出。使用方法 - cert.getSubjectX500Principal()。getname()主題名稱2.5.4.5 =#130d4e2d61626c652f49542f303130,2.5.4.72 =#1308456e67696e656572,2.5.4.41 =#13104e7577616e20446520416c6d65696461,1.2.840.113549.1.9.1 =#16106e7577616e406e2d61626c652e62697a,OU =信息技術,O = N-able Pvt Ltd,ST = Western,C = LK

2.5.4.5是一個OID(對象標識符),它被編碼。

使用方法 - getSubjectDN()

OID.2.5.4.5 = N-能/ IT/010,OID.2.5.4.72 =工程師,OID.2.5.4.41 = Nuwan德阿爾梅達OID.1.2。 840.113549.1.9.1 =#16106E7577616E406E2D61626C652E62697A,OU =信息技術,O =「N-able私人有限公司」,ST =西方,C = LK

這裏也有一些信息編碼,例如:電子郵件地址。所以回到我的問題,我們如何根據OID分別提取信息(而不是編碼)。此外,如果您在Windows操作系統中安裝證書,則可以正確查看主題信息。我需要的是獲取OID值信息的代碼,以便通過Java中的OID來分別提取主題詳細信息。

再次感謝您提前。

+2

能否請您詳細闡述您的使用情況。 – curious

回答

0

以下代碼(不包括錯誤處理)將從.cer文件生成一個X509Certificate實例。然後,您可以使用該對象的方法來檢查證書的屬性。該代碼是通用的Java,但應該在Android中工作。

X509Certificate cert = null; 

FileInputStream fis = null; 
ByteArrayInputStream bais = null; 

String source = "certificate.cer"; 
String certType = "X.509" 

fis = new FileInputStream(source); 
byte[] value = new byte[fis.available()]; 
fis.read(value); 

bais = new ByteArrayInputStream(value); 

java.security.cert.CertificateFactory cf = java.security.cert.CertificateFactory.getInstance(certType); 
cert = (X509Certificate)cf.generateCertificate(bais); 
1

查找到充氣城堡ASN.1解析庫,特別是X500Name。它可以將一個專有名稱(DN)解析爲其部分(CN,O等)。

http://www.bouncycastle.org/docs/docs1.5on/index.html

+0

謝謝你的指導尼古拉。我正在Android中嘗試此操作。這是爲了我的研究。但是,即使我在項目中包含了Bouncy-castle或Spongy-castle JAR文件,X509Name也會被折舊。此外還有從X509Certificate文件獲取X509Name的方法。非常感謝你。如果有人有任何想法,這是非常有幫助的。 – Neiminda

+0

'X500Name'(不是509)肯定不會被棄用,它有一個帶'String'的構造函數。探索示例的源代碼也有幫助。 –

相關問題