2012-11-04 35 views
0

你好我使用斯卡拉與充氣城堡加密庫從一個文件中的X.509證書閱讀。我正嘗試使用以下代碼讀取一些擴展的值:解碼充氣城堡ASN.1對象斯卡拉

val ext = JcaX509ExtensionUtils.parseExtensionValue(certificate.getExtensionValue("2.5.29.17")) 

這將返回ASN.1對象,如下所示。

class org.bouncycastle.asn1.DLSequence 

我現在需要解碼ASN.1對象來獲取值。但是,我似乎一輪兜兜,我想不出如何輕鬆無涉水雖然Java代碼畝解碼ASN.1對象。當然這不是那麼困難?

這是我的代碼,並正在努力至今:

import java.io._ 
import java.security.cert.CertificateFactory 
import java.security.Security 
import org.bouncycastle.jce.provider._ 
import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils 

object Main extends App {  
Security.addProvider(new BouncyCastleProvider) 
val provider = new BouncyCastleProvider 
val in = new FileInputStream("cert.cer") 
var certificateFactory = CertificateFactory.getInstance("X509", provider) 
val certificate = certificateFactory.generateCertificate(in).asInstanceOf[X509CertificateObject] 

val ext = JcaX509ExtensionUtils.parseExtensionValue(certificate.getExtensionValue("2.5.29.17")) 

println(ext) 

} 

輸出:

[[2]#4c303037313035392e6d6e73756b2e6164726f6f742e6d61726b73616e647370656e6365722e636f6d] 

回答

0

如果您有興趣擴展2.5.29.17(主題替代名稱)而已,爲什麼你不使用證書嗎? getSubjectAlternativeNames()?這給了你這個特定擴展名的不錯的面向對象的訪問......還有,當然,輔助功能爲其他擴展爲好。

+0

呀 - 感謝。其實我也需要訪問其他一些擴展。所以任何指針將不勝感激。我希望能有類似於certificate.getSubjectAlternativeNames函數的其他擴展,除了直接使用ASN.1函數之外,我還找不到任何東西。 – user1513388

+0

那麼,你對哪些擴展感興趣,還沒有被X509Certificate類支持(請參閱我的答案中的Javadoc鏈接)? –