2012-11-04 21 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链接)? –