-
- 所有已知实现类:
-
X509Certificate
,X509CRL
,X509CRLEntry
public interface X509Extension
X509扩展接口。为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
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 Set<String>
getCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为“CRITICAL”的扩展名的OID字符串集。byte[]
getExtensionValue(String oid)
获取由传入的oid
字符串标识的扩展值( extnValue )的DER编码的OCTET字符串。Set<String>
getNonCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为“非关键性”的扩展名的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字符串的标识为关键的扩展名的集合(或空集(如果没有标记为关键))。 如果根本没有扩展名,那么这个方法返回null。
-
getNonCriticalExtensionOIDs
Set<String> getNonCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为“非关键性”的扩展名的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字符串的集合(或空的集合,如果没有标记为非关键的)。 如果根本没有扩展名,那么这个方法返回null。
-
getExtensionValue
byte[] getExtensionValue(String oid)
获取由传入的oid
字符串标识的扩展值( 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。
-
-