【发布时间】:2020-01-28 22:23:43
【问题描述】:
我正在编写一个小型 CA 实现。可以从现有证书引导此 CA。执行此操作后,我想验证输入是否具有正确的扩展名:
private static final Set<String> REQUIRED_CA_EXTENSIONS = Set.of(
Extension.keyUsage.getId(),
Extension.subjectKeyIdentifier.getId());
private static void validateExtensions(final X509Certificate certificate) {
if (!CertificateExtensions.getAll(certificate).containsAll(REQUIRED_CA_EXTENSIONS)) {
throw new RuntimeException("Attempted to create a CA from a certificate without required extensions");
}
}
// Util method
public static Set<String> getAll(final X509Certificate certificate) {
final Set<String> extensions = new HashSet<>();
extensions.addAll(certificate.getCriticalExtensionOIDs());
extensions.addAll(certificate.getNonCriticalExtensionOIDs());
return extensions;
}
但是,这仅验证扩展是否存在。我还需要验证 keyUsage 扩展是否同时包含 keyCertSign 和 cRLSign 才能签署证书。
如何使用充气城堡和/或 JCA 做到这一点?
【问题讨论】:
标签: java x509certificate bouncycastle