0

嗨,我正在使用 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 对象以获取值。但是,我似乎在绕圈子,因为我不知道如何在不涉足大量 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]
4

1 回答 1

0

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

于 2012-11-05T08:03:12.003 回答