java.lang.Object
java.security.cert.CRL
java.security.cert.X509CRL
- 所有已实现的接口:
-
X509Extension
用于X.509证书吊销列表(CRL)的抽象类。CRL是一个时间戳列表,用于标识被吊销的证书。它由证书颁发机构(CA)签名,并在公共存储库中免费提供。
每个被吊销的证书在CRL中通过其证书序列号进行标识。当使用证书的系统使用证书(例如,用于验证远程用户的数字签名),该系统不仅检查证书签名和有效性,还获取一个适当最新的CRL,并检查证书序列号是否在该CRL中。"适当最新"的含义可能会根据本地政策而有所不同,但通常意味着最近发布的CRL。CA会定期(例如,每小时、每天或每周)发布新的CRL。随着吊销的发生,条目会被添加到CRL中,并且当证书到期日期到达时,条目可能会被移除。
X.509 v2 CRL格式在ASN.1中描述如下:
CertificateList ::= SEQUENCE {
tbsCertList TBSCertList,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING }
更多信息可以在RFC 5280: 互联网X.509公钥基础设施证书和CRL配置文件中找到。
tbsCertList的ASN.1定义如下:
TBSCertList ::= SEQUENCE {
version Version OPTIONAL,
-- 如果存在,必须是v2
signature AlgorithmIdentifier,
issuer Name,
thisUpdate ChoiceOfTime,
nextUpdate ChoiceOfTime OPTIONAL,
revokedCertificates SEQUENCE OF SEQUENCE {
userCertificate CertificateSerialNumber,
revocationDate ChoiceOfTime,
crlEntryExtensions Extensions OPTIONAL
-- 如果存在,必须是v2
} OPTIONAL,
crlExtensions [0] EXPLICIT Extensions OPTIONAL
-- 如果存在,必须是v2
}
CRL是使用证书工厂实例化的。以下是如何实例化X.509 CRL的示例:
try (InputStream inStream = new FileInputStream("fileName-of-crl")) {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509CRL crl = (X509CRL)cf.generateCRL(inStream);
}
- 自版本:
- 1.2
- 参见:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionboolean将此CRL与给定对象进行相等性比较。abstract byte[]返回此CRL的ASN.1 DER编码形式。abstract Principal已弃用。将CRL中的颁发者(颁发者可分辨名称)值作为X500Principal返回。abstract Date从CRL中获取nextUpdate日期。abstract X509CRLEntrygetRevokedCertificate(BigInteger serialNumber) 获取具有给定证书序列号的CRL条目(如果有)。getRevokedCertificate(X509Certificate certificate) 获取给定证书的CRL条目(如果有)。abstract Set<? extends X509CRLEntry> 获取此CRL中的所有条目。abstract String获取CRL签名算法的算法名称。abstract String从CRL中获取CRL签名算法的OID字符串。abstract byte[]从此CRL的签名算法中获取DER编码的签名算法参数。abstract byte[]从CRL中获取signature值(原始签名位)。abstract byte[]从此CRL中获取DER编码的CRL信息,即tbsCertList。abstract Date从CRL中获取thisUpdate日期。abstract int从CRL中获取version(版本号)值。inthashCode()从其编码形式为此CRL返回哈希码值。abstract void验证此CRL是否使用与给定公钥对应的私钥进行签名。abstract void验证此CRL是否使用与给定公钥对应的私钥进行签名。void验证此CRL是否使用与给定公钥对应的私钥进行签名。Methods declared in class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods declared in interface java.security.cert.X509Extension
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension
-
Constructor Details
-
X509CRL
protected X509CRL()X.509 CRL的构造函数。
-
-
Method Details
-
equals
将此CRL与给定对象进行相等性比较。如果other对象是X509CRL的实例,则会检索其编码形式并与此CRL的编码形式进行比较。 -
hashCode
public int hashCode()从其编码形式为此CRL返回哈希码值。 -
getEncoded
返回此CRL的ASN.1 DER编码形式。- 返回:
- 此证书的编码形式
- 抛出:
-
CRLException- 如果发生编码错误。
-
verify
public abstract void verify(PublicKey key) throws CRLException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException 验证此CRL是否使用与给定公钥对应的私钥进行签名。- 参数:
-
key- 用于进行验证的公钥。 - 抛出:
-
NoSuchAlgorithmException- 不支持的签名算法。 -
InvalidKeyException- 错误的密钥。 -
NoSuchProviderException- 如果没有默认提供程序。 -
SignatureException- 签名错误。 -
CRLException- 编码错误。
-
verify
public abstract void verify(PublicKey key, String sigProvider) throws CRLException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException 验证此CRL是否使用与给定公钥对应的私钥进行签名。此方法使用给定提供程序提供的签名验证引擎。- 参数:
-
key- 用于进行验证的公钥。 -
sigProvider- 签名提供程序的名称。 - 抛出:
-
NoSuchAlgorithmException- 不支持的签名算法。 -
InvalidKeyException- 错误的密钥。 -
NoSuchProviderException- 错误的提供程序。 -
SignatureException- 签名错误。 -
CRLException- 编码错误。
-
verify
public void verify(PublicKey key, Provider sigProvider) throws CRLException, NoSuchAlgorithmException, InvalidKeyException, SignatureException 验证此CRL是否使用与给定公钥对应的私钥进行签名。此方法使用给定提供程序提供的签名验证引擎。请注意,指定的Provider对象不必在提供程序列表中注册。此方法已添加到Java平台标准版的1.8版本中。为了与现有服务提供程序保持向后兼容,此方法不是abstract,并提供了默认实现。- 参数:
-
key- 用于进行验证的公钥。 -
sigProvider- 签名提供程序。 - 抛出:
-
NoSuchAlgorithmException- 不支持的签名算法。 -
InvalidKeyException- 错误的密钥。 -
SignatureException- 签名错误。 -
CRLException- 编码错误。 - 自版本:
- 1.8
-
getVersion
public abstract int getVersion()从CRL中获取version(版本号)值。此项的ASN.1定义如下:version Version OPTIONAL, -- 如果存在,必须是v2 Version ::= INTEGER { v1(0), v2(1), v3(2) } -- v3不适用于CRL,但为了与证书的Version定义保持一致而出现- 返回:
- 版本号,即1或2。
-
getIssuerDN
Deprecated.UsegetIssuerX500Principal()instead. This method returns theissueras an implementation specificPrincipalobject, which should not be relied upon by portable code.获取CRL中的issuer(颁发者可分辨名称)值。颁发者名称标识签署(和颁发)CRL的实体。颁发者名称字段包含X.500可分辨名称(DN)。其ASN.1定义如下:
issuer Name Name ::= CHOICE { RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName RelativeDistinguishedName ::= SET OF AttributeValueAssertion AttributeValueAssertion ::= SEQUENCE { AttributeType, AttributeValue } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANYName描述了由属性(如国家名称)和相应值(如US)组成的分层名称。AttributeValue组件的类型由AttributeType确定;通常它将是一个directoryString。directoryString通常是PrintableString、TeletexString或UniversalString之一。- 返回:
- 其名称为颁发者可分辨名称的Principal。
-
getIssuerX500Principal
以X500Principal形式返回CRL中的颁发者(颁发者可分辨名称)值。建议子类重写此方法。
- 返回:
-
表示颁发者可分辨名称的
X500Principal。 - 自:
- 1.4
-
getThisUpdate
从CRL中获取thisUpdate日期。其ASN.1定义如下:thisUpdate ChoiceOfTime ChoiceOfTime ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }- 返回:
-
来自CRL的
thisUpdate日期。
-
getNextUpdate
从CRL中获取nextUpdate日期。- 返回:
-
来自CRL的
nextUpdate日期,如果不存在则返回null。
-
getRevokedCertificate
获取具有给定证书序列号的CRL条目(如果有)。- 参数:
-
serialNumber- 要查找CRL条目的证书序列号 - 返回:
- 具有给定序列号的条目,如果此CRL中不存在此类条目则返回null。
- 参见:
-
getRevokedCertificate
获取给定证书的CRL条目(如果有)。此方法可用于查找间接CRL中的CRL条目,即包含来自CRL颁发者以外颁发者的条目的CRL。默认实现仅返回由CRL颁发者颁发的证书的条目。希望支持间接CRL的子类应重写此方法。
- 参数:
-
certificate- 要查找CRL条目的证书 - 返回:
- 给定证书的条目,如果此CRL中不存在此类条目则返回null。
- 抛出:
-
NullPointerException- 如果证书为null - 自:
- 1.5
-
getRevokedCertificates
获取此CRL中的所有条目。返回一组X509CRLEntry对象。- 返回:
- 所有条目,如果不存在则返回null。
- 参见:
-
getTBSCertList
获取此CRL的DER编码的CRL信息,即来自此CRL的tbsCertList。可用于独立验证签名。- 返回:
- DER编码的CRL信息。
- 抛出:
-
CRLException- 如果发生编码错误。
-
getSignature
public abstract byte[] getSignature()从CRL中获取signature值(原始签名位)。其ASN.1定义如下:signature BIT STRING
- 返回:
- 签名。
-
getSigAlgName
获取CRL签名算法的签名算法名称。例如字符串为"SHA256withRSA"。其ASN.1定义如下:signatureAlgorithm AlgorithmIdentifier AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL } -- 包含与算法对象标识符值一起使用的类型的值算法名称由
algorithmOID字符串确定。- 返回:
- 签名算法名称。
-
getSigAlgOID
从CRL中获取签名算法OID字符串。OID由一组用句点分隔的非负整数表示。例如,字符串"1.2.840.10040.4.3"标识了在RFC 3279: Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and CRL Profile中定义的SHA-1 with DSA签名算法。有关相关ASN.1定义,请参见
getSigAlgName。- 返回:
- 签名算法OID字符串。
-
getSigAlgParams
public abstract byte[] getSigAlgParams()从此CRL的签名算法中获取DER编码的签名算法参数。在大多数情况下,签名算法参数为null;参数通常与公钥一起提供。如果需要访问单个参数值,则使用AlgorithmParameters并使用getSigAlgName返回的名称进行实例化。有关相关ASN.1定义,请参见
getSigAlgName。- 返回:
- DER编码的签名算法参数,如果不存在参数则返回null。
-
getIssuerX500Principal()。