模块  java.base
软件包  java.security.cert

Interface X509Extension

  • 所有已知实现类:
    X509CertificateX509CRLX509CRLEntry

    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方法返回扩展值的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字符串的Set(如果没有标记为关键,则为空集)。 如果根本没有扩展,则此方法返回null。
      • getNonCriticalExtensionOIDs

        Set<String> getNonCriticalExtensionOIDs()
        获取由实现此接口的对象管理的证书/ CRL中标记为NON-CRITICAL的扩展的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字符串的Set(如果没有标记为非关键,则为空集)。 如果根本没有扩展,则此方法返回null。
      • getExtensionValue

        byte[] getExtensionValue​(String oid)
        获取由传入的oid String标识的扩展值( 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。