在 ssl 握手时,出现以下错误:
Certificate contains unsupported critical extensions.
此异常是由 sun.security.validator.EndEntityChecker 类抛出的
private void checkRemainingExtensions(Set<String> exts)
throws CertificateException {
// basic constraints irrelevant in EE certs
exts.remove(SimpleValidator.OID_BASIC_CONSTRAINTS);
// If the subject field contains an empty sequence, the subjectAltName
// extension MUST be marked critical.
// We do not check the validity of the critical extension, just mark
// it recognizable here.
exts.remove(OID_SUBJECT_ALT_NAME);
if (!exts.isEmpty()) {
throw new CertificateException("Certificate contains unsupported "
+ "critical extensions: " + exts);
}
}
事实证明,导致错误的扩展是验证过程中唯一未删除的扩展。 无法从 CA 中删除此扩展。 如何将此扩展程序列入白名单?
您可以编写一个
PKIXCertPathChecker
来处理并删除此扩展,然后使用 PKIXParameters.addCertPathChecker
方法将其添加为检查器,然后使用 TrustManagerFactory.init
方法设置这些参数。