如何使用 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 邮件列表上。
我有一个根 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 邮件列表上。