-
- 所有已知实现类:
-
X509Certificate
,X509CRL
,X509CRLEntry
public interface X509Extension
X.509扩展的接口。为X.509 v3
Certificates
和v2CRLs
(证书撤销列表)定义的扩展提供了用于将其他属性与用户或公钥相关联,用于管理证书层次结构以及管理CRL分发的方法。 X.509扩展格式还允许社区定义私有扩展,以承载这些社区特有的信息。证书/ CRL中的每个扩展可以被指定为关键或非关键。 证书/ CRL使用系统(验证证书/ CRL的应用程序)如果遇到无法识别的关键扩展,则必须拒绝证书/ CRL。 如果无法识别,则可以忽略非关键扩展。
ASN.1的定义是:
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension Extension ::= SEQUENCE { extnId OBJECT IDENTIFIER, critical BOOLEAN DEFAULT FALSE, extnValue OCTET STRING -- contains a DER encoding of a value -- of the type registered for use with -- the extnId object identifier value }
由于并非所有扩展都是已知的,因此getExtensionValue
方法返回扩展值的DER编码的OCTET STRING(即extnValue
)。 然后,这可以由了解扩展的类来处理。- 从以下版本开始:
- 1.2
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 Set<String>
getCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为CRITICAL的扩展的OID字符串集。byte[]
getExtensionValue(String oid)
获取由传入的oid
字符串标识的扩展值( extnValue )的DER编码的OCTET字符串。Set<String>
getNonCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为NON-CRITICAL的扩展的OID字符串集。boolean
hasUnsupportedCriticalExtension()
检查是否存在不受支持的关键扩展。
-
-
-
方法详细信息
-
hasUnsupportedCriticalExtension
boolean hasUnsupportedCriticalExtension()
检查是否存在不受支持的关键扩展。- 结果
-
true
如果找到不支持的关键扩展,否则为false
。
-
getCriticalExtensionOIDs
Set<String> getCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为CRITICAL的扩展的OID字符串集。 以下是从X509Certificate获取一组关键扩展并打印OID的示例代码:X509Certificate cert = null; try (InputStream inStrm = new FileInputStream("DER-encoded-Cert")) { CertificateFactory cf = CertificateFactory.getInstance("X.509"); cert = (X509Certificate)cf.generateCertificate(inStrm); } Set<String> critSet = cert.getCriticalExtensionOIDs(); if (critSet != null && !critSet.isEmpty()) { System.out.println("Set of critical extensions:"); for (String oid : critSet) { System.out.println(oid); } }
- 结果
- 对于标记为关键的扩展,扩展OID字符串的Set(如果没有标记为关键,则为空集)。 如果根本没有扩展,则此方法返回null。
-
getNonCriticalExtensionOIDs
Set<String> getNonCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为NON-CRITICAL的扩展的OID字符串集。 以下是从X509CRL撤销的证书条目中获取一组非关键扩展并打印OID的示例代码:CertificateFactory cf = null; X509CRL crl = null; try (InputStream inStrm = new FileInputStream("DER-encoded-CRL")) { cf = CertificateFactory.getInstance("X.509"); crl = (X509CRL)cf.generateCRL(inStrm); } byte[] certData = <DER-encoded certificate data> ByteArrayInputStream bais = new ByteArrayInputStream(certData); X509Certificate cert = (X509Certificate)cf.generateCertificate(bais); X509CRLEntry badCert = crl.getRevokedCertificate(cert.getSerialNumber()); if (badCert != null) { Set<String> nonCritSet = badCert.getNonCriticalExtensionOIDs(); if (nonCritSet != null) for (String oid : nonCritSet) { System.out.println(oid); } }
- 结果
- 对于标记为非关键的扩展,扩展OID字符串的Set(如果没有标记为非关键,则为空集)。 如果根本没有扩展,则此方法返回null。
-
getExtensionValue
byte[] getExtensionValue(String oid)
获取由传入的oid
String标识的扩展值( extnValue )的DER编码的OCTET字符串。oid
字符串由一组以句点分隔的非负整数表示。例如:
Examples of OIDs and extension names OID (Object Identifier) Extension Name 2.5.29.14 SubjectKeyIdentifier 2.5.29.15 KeyUsage 2.5.29.16 PrivateKeyUsage 2.5.29.17 SubjectAlternativeName 2.5.29.18 IssuerAlternativeName 2.5.29.19 BasicConstraints 2.5.29.30 NameConstraints 2.5.29.33 PolicyMappings 2.5.29.35 AuthorityKeyIdentifier 2.5.29.36 PolicyConstraints- 参数
-
oid
- 扩展的对象标识符值。 - 结果
- 扩展值的DER编码八位字节字符串,如果不存在则为null。
-
-