您好我正在使用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]
答案 0 :(得分:0)
如果您只对扩展2.5.29.17(主题替代名称)感兴趣,为什么不使用证书。getSubjectAlternativeNames()?这为您提供了对这个特定扩展的一个很好的面向对象的访问...当然,其他扩展也有辅助函数。