- 所有已知的实现类:
-
X509Certificate
,X509CRL
,X509CRLEntry
public interface X509Extension
X.509扩展的接口。
X.509 v3证书和v2证书吊销列表(CRLs)定义的扩展提供了将附加属性与用户或公钥关联、管理认证层次结构以及管理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 -- 包含用于extnId对象标识符值注册使用的值的DER编码 }由于并非所有扩展都是已知的,
getExtensionValue
方法返回扩展值(即extnValue
)的DER编码的OCTET STRING。然后可以由了解扩展的类处理它。
- 自版本:
- 1.2
-
Method Summary
Modifier and TypeMethodDescription获取由实现此接口的对象管理的证书/CRL中标记为关键的扩展的OID字符串集合。byte[]
getExtensionValue
(String oid) 获取由传入的oid
字符串标识的扩展值(extnValue)的DER编码的OCTET字符串。获取由实现此接口的对象管理的证书/CRL中标记为非关键的扩展的OID字符串集合。boolean
检查是否存在不受支持的关键扩展。
-
Method Details
-
hasUnsupportedCriticalExtension
boolean hasUnsupportedCriticalExtension()检查是否存在不受支持的关键扩展。- 返回:
-
如果找到不受支持的关键扩展,则返回
true
,否则返回false
。
-
getCriticalExtensionOIDs
获取由实现此接口的对象管理的证书/CRL中标记为关键的扩展的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("关键扩展集合:"); for (String oid : critSet) { System.out.println(oid); } }
- 返回:
- 标记为关键的扩展的扩展OID字符串集合(如果没有标记为关键的扩展,则返回空集)。如果根本没有扩展,则此方法返回null。
-
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
获取由传入的oid
字符串标识的扩展值(extnValue)的DER编码的OCTET字符串。oid
字符串由一组用句点分隔的非负整数表示。例如:
OID (对象标识符) 扩展名称 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。
-