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
-
Method Summary
Modifier and TypeMethodDescriptionboolean
将此CRL与给定对象进行相等性比较。abstract byte[]
返回此CRL的ASN.1 DER编码形式。abstract Principal
已弃用。将CRL中的颁发者(颁发者可分辨名称)值作为X500Principal
返回。abstract Date
从CRL中获取nextUpdate
日期。abstract X509CRLEntry
getRevokedCertificate
(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
(版本号)值。int
hashCode()
从其编码形式为此CRL返回哈希码值。abstract void
验证此CRL是否使用与给定公钥对应的私钥进行签名。abstract void
验证此CRL是否使用与给定公钥对应的私钥进行签名。void
验证此CRL是否使用与给定公钥对应的私钥进行签名。Methods declared in class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods 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 theissuer
as an implementation specificPrincipal
object, 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 ::= ANY
Name
描述了由属性(如国家名称)和相应值(如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 } -- 包含与算法对象标识符值一起使用的类型的值
算法名称由
algorithm
OID字符串确定。- 返回:
- 签名算法名称。
-
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()
。