public interface X509Extension
X.509 扩展的接口。
为 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
方法返回扩展值(也就是
extnValue
)的 DER 编码形式的 OCTET STRING。然后可由识别该扩展的
类 来处理该返回值。
方法摘要 | |
---|---|
Set<String> |
getCriticalExtensionOIDs() 获取实现此接口的对象所管理的证书/CRL 中,被标记为 CRITICAL 的扩展的 OID 字符串 Set。 |
byte[] |
getExtensionValue(String oid) 获取扩展值 (extnValue) 的 DER 编码 OCTET 字符串,该扩展值由传入的 oid String 标识。 |
Set<String> |
getNonCriticalExtensionOIDs() 获取实现此接口的对象所管理的证书/CRL 中,被标记为 NON-CRITICAL 的扩展的 OID 字符串 Set。 |
boolean |
hasUnsupportedCriticalExtension() 检查是否存在不支持的关键扩展。 |
方法详细信息 |
---|
boolean hasUnsupportedCriticalExtension()
Set<String> getCriticalExtensionOIDs()
InputStream inStrm = new FileInputStream("DER-encoded-Cert"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate)cf.generateCertificate(inStrm); inStrm.close();
Set critSet = cert.getCriticalExtensionOIDs(); if (critSet != null && !critSet.isEmpty()) { System.out.println("Set of critical extensions:"); for (Iterator i = critSet.iterator(); i.hasNext();) { String oid = (String)i.next(); System.out.println(oid); } }
Set<String> getNonCriticalExtensionOIDs()
InputStream inStrm = new FileInputStream("DER-encoded-CRL"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509CRL crl = (X509CRL)cf.generateCRL(inStrm); inStrm.close();
byte[] certData = <DER-encoded certificate data> ByteArrayInputStream bais = new ByteArrayInputStream(certData); X509Certificate cert = (X509Certificate)cf.generateCertificate(bais); bais.close(); X509CRLEntry badCert = crl.getRevokedCertificate(cert.getSerialNumber());
if (badCert != null) { Set nonCritSet = badCert.getNonCriticalExtensionOIDs();
if (nonCritSet != null) for (Iterator i = nonCritSet.iterator(); i.hasNext();) { String oid = (String)i.next(); System.out.println(oid); } }
byte[] getExtensionValue(String oid)
oid
String 标识。该
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
- 该扩展的对象标识符值。