嗨,我正在使用 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]