こんにちは、Bouncy Castle Crypto ライブラリで Scala を使用して、ファイルから 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]