解码Scala中的Bouncy Castle ASN.1对象

时间:2012-11-04 18:45:50

标签: scala decode bouncycastle

您好我正在使用Scala和Bouncy Castle Crypto库从文件中读取X.509证书。我正在尝试使用以下代码读取某些扩展的值:

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

这将返回ASN.1对象,如下所示。

class org.bouncycastle.asn1.DLSequence

我现在需要解码ASN.1对象以获取值。但是,我似乎要绕圈子,因为我无法想象如何轻松解码ASN.1对象而不涉及大量的Java代码。当然不是那么难吗?

这是我的代码,目前正在运作:

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]

1 个答案:

答案 0 :(得分:0)

如果您只对扩展2.5.29.17(主题替代名称)感兴趣,为什么不使用证书。getSubjectAlternativeNames()?这为您提供了对这个特定扩展的一个很好的面向对象的访问...当然,其他扩展也有辅助函数。