public interface X509Extension
为X.509 v3 Certificates
和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
-- contains a DER encoding of a value
-- of the type registered for use with
-- the extnId object identifier value
}
由于并非所有分机都是已知的,因此getExtensionValue
方法返回扩展值的DER编码OCTET STRING(即extnValue
)。
然后可以由理解扩展名的类来处理。
Modifier and Type | Method and Description |
---|---|
Set<String> |
getCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为“CRITICAL”的扩展名的OID字符串集。
|
byte[] |
getExtensionValue(String oid)
获取由传入的
oid 字符串标识的扩展值(
extnValue )的DER编码的OCTET字符串。
|
Set<String> |
getNonCriticalExtensionOIDs()
获取由实现此接口的对象管理的证书/ CRL中标记为“非关键性”的扩展名的OID字符串集。
|
boolean |
hasUnsupportedCriticalExtension()
检查是否有不支持的关键扩展。
|
boolean hasUnsupportedCriticalExtension()
true
如果发现不支持的关键扩展,否则为
false
。
Set<String> getCriticalExtensionOIDs()
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); } }
Set<String> getNonCriticalExtensionOIDs()
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); } }
byte[] getExtensionValue(String oid)
oid
字符串标识的扩展值( extnValue )的DER编码的OCTET字符串。
oid
字符串由一组以句点分隔的非负整数表示。
例如:
oid
-
oid
的对象标识符值。