Module  java.base
软件包  java.security.cert

Interface X509Extension

  • 所有已知实现类:
    X509CertificateX509CRLX509CRLEntry


    public interface X509Extension
    X509扩展接口。

    为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 )。 然后可以由理解扩展名的来处理。
    从以下版本开始:
    1.2
    • 方法详细信息

      • 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。