如何使用 BouncyCastle 获取根 CA 和终端实体之间的证书路径?

How to use BouncyCastle to get the certification path between a root CA and an end entity?

我有一个根 CA、一组中间 CA 和一个终端实体。全部表示为 org.bouncycastle.cert.X509CertificateHolder 个实例。我如何获得根实体和最终实体之间的证书路径(又名证书链),或者如果没有找到路径则得到异常?

Here's how to do it with pure Java code,但由于我已经在使用 BouncyCastle,我认为为此也使用 BouncyCastle 会更高效且更易于维护——此外,我更愿意避免在 [= 之间进行转换21=] 和 BC 证书,这样我就可以 return 原始证书实例的一个子集。

我找到了软件包 org.bouncycastle.cert.path,但我不知道它是否对我有帮助或如何使用它(我找不到任何示例)。

请注意,中间证书集可以为空或包含不属于链的多余证书。另外,作为一个套装,它不会被订购。

听起来您需要 CertPathBuilder,因为您没有提议的链,只有“一堆证书”。 BC 提供程序包括一个 CertPathBuilder 实现(例如 CertPathBuilder.getInstance("PKIX", "BC")),按照您提供的 link 中的描述使用。

BC 的 pkix jar,虽然有一些具有暗示性名称的包,但没有复制 CertPathBuilder 的工具(可能甚至没有完整的 CertPathValidator)。一定数量的证书格式转换是生活中的事实;可能有办法将其最小化。一旦你有了一个有效的例子,也许会把它放在 BC 邮件列表上。