Module java.base

Interface X509Extension

所有已知的实现类:
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 Details

    • hasUnsupportedCriticalExtension

      boolean hasUnsupportedCriticalExtension()
      检查是否存在不受支持的关键扩展。
      返回:
      如果找到不受支持的关键扩展,则返回true,否则返回false
    • getCriticalExtensionOIDs

      Set<String> 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

      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字符串由一组用句点分隔的非负整数表示。

      例如:

      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。