public abstract class X509Certificate extends Certificate implements X509Extension
对X.509证书的抽象类。这提供了一个标准的方法来访问一个X.509证书的所有属性。
1996六月,基本X.509 v3格式是由ISO / IEC和ANSI X9完成,这是下面描述的ASN。1:
证书::=序列tbscertificate tbscertificate,algorithmidentifier签名算法,签名位字符串
这些证书被广泛用于支持在互联网安全系统中的身份验证和其他功能。常见的应用包括隐私增强邮件(PEM),传输层安全(SSL),代码为可信软件分发签名和安全电子交易(SET)。
这些证书的管理和保证的证书颁发机构(CA)。CAS是通过将数据创建证书的X.509标准的格式,然后进行数字签名,数据服务。中国科学院作为受信任的第三方,使彼此之间没有直接的知识的校长之间的介绍。钙证书是由自己签署的,或由一些其他的钙,如一个“根”约。
更多的信息可以发现,在RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile。
ASN的tbsCertificate
1定义:
tbscertificate::=序列{版本[ 0 ]明确的版本默认V1,序列号certificateserialnumber,签名algorithmidentifier,发行人名称,效力,课题名称,subjectpublickeyinfo subjectpublickeyinfo,issueruniqueid [ 1 ]隐uniqueidentifier可选,如果当前版本必须是v2或v3subjectuniqueid [ 2 ]隐uniqueidentifier可选,如果当前版本必须是v2或v3扩展[ 3 ]显式扩展可选如果当前版本必须是V3}
证书被实例化使用证书厂。下面是一个例子,如何实例化一个X.509证书:
尝试(InputStream流=新的输入(“filename证书”)){certificatefactory CF = certificatefactory getInstance(“证书”);X509Certificate证书=(X509Certificate)cf.generatecertificate(河道);}
Certificate.CertificateRep
Modifier | Constructor and Description |
---|---|
protected |
X509Certificate()
X.509证书的构造函数。
|
Modifier and Type | Method and Description |
---|---|
abstract void |
checkValidity()
检查证书是否有效。
|
abstract void |
checkValidity(Date date)
检查给定日期是否在证书有效期内。
|
abstract int |
getBasicConstraints()
从关键
BasicConstraints 扩展获取证书约束的路径长度,(OID = 2.5.29.19)。
|
List<String> |
getExtendedKeyUsage()
获取表示的扩展密钥使用扩展的
ExtKeyUsageSyntax 领域对象标识符字符串的一个不可修改的列表,(OID = 2.5.29.37)。
|
Collection<List<?>> |
getIssuerAlternativeNames()
有一个不变的发行人选择的名字从
IssuerAltName 延期收藏(OID = 2.5.29.18)。
|
abstract Principal |
getIssuerDN()
诋毁,取而代之的
getIssuerX500Principal()。
|
abstract boolean[] |
getIssuerUniqueID()
从获取证书的
issuerUniqueID 价值。
|
X500Principal |
getIssuerX500Principal()
发行人(发行人收益可分辨名称)从证书值作为
X500Principal 。
|
abstract boolean[] |
getKeyUsage()
获取一个表示的
KeyUsage 扩展位布尔数组(OID = 2.5.29.15)。
|
abstract Date |
getNotAfter()
从该证书的有效期有
notAfter 日期。
|
abstract Date |
getNotBefore()
从该证书的有效期有
notBefore 日期。
|
abstract BigInteger |
getSerialNumber()
从获取证书的
serialNumber 价值。
|
abstract String |
getSigAlgName()
获取证书签名算法的签名算法的名称。
|
abstract String |
getSigAlgOID()
从获取证书的签名算法OID的字符串。
|
abstract byte[] |
getSigAlgParams()
从该证书的签名算法得到的的的的的的的的的编码的签名算法参数。
|
abstract byte[] |
getSignature()
得到
signature 值(原始签名位)从证书。
|
Collection<List<?>> |
getSubjectAlternativeNames()
有一个永恒不变的主题选择的名字从
SubjectAltName 延期收藏(OID = 2.5.29.17)。
|
abstract Principal |
getSubjectDN()
诋毁,取而代之的
getSubjectX500Principal()。
|
abstract boolean[] |
getSubjectUniqueID()
从获取证书的
subjectUniqueID 价值。
|
X500Principal |
getSubjectX500Principal()
返回的主题(主题可分辨名称)从证书值作为
X500Principal 。
|
abstract byte[] |
getTBSCertificate()
得到的DER编码的证书信息,从该证书的
tbsCertificate 。
|
abstract int |
getVersion()
得到
version (版本号)从证书的价值。
|
void |
verify(PublicKey key, Provider sigProvider)
验证该证书是使用对应于指定公共密钥的私钥签名的。
|
equals, getEncoded, getPublicKey, getType, hashCode, toString, verify, verify, writeReplace
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension
public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException
有效期由两个日期/时间值组成:证书有效期的第一个和最后一个日期(和时间)。它是定义在ASN。1:
效力有效性::=序列先certificatevaliditydate,之后,certificatevaliditydate }certificatevaliditydate::=选择{UTCTime UTCTime,generaltime generalizedtime }
CertificateExpiredException
如果证书已过期。
CertificateNotYetValidException
-如果证书尚未生效。
public abstract void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException
date
-日期对照看看这个证书是有效的在那个日期/时间。
CertificateExpiredException
如果证书已过期,相对于
date
提供。
CertificateNotYetValidException
-如果证书没有有效的
date
提供。
checkValidity()
public abstract int getVersion()
version
(版本号)从证书的价值。ASN。这1的定义是:
版本[ 0 ]明确的版本默认V1版本::=整数{ V1,V2(0)(1),V3(2)}
public abstract BigInteger getSerialNumber()
serialNumber
价值。序列号是由证书颁发机构分配给每个证书的整数。它必须是唯一的每一个由一个给定的证书颁发的证书(即,发行人的名称和序列号确定一个唯一的证书)。ASN。这1的定义是:
序列号certificateserialnumberCertificateSerialNumber::=整数
public abstract Principal getIssuerDN()
issuer
作为具体实现的主要目标,而不应依赖可移植代码。
得到issuer
(发行人可分辨名称)从证书的价值。发行人名称标识签名(并颁发)证书的实体。
发行人名称字段包含一个X.500可分辨名称(DN)。ASN。此1定义:
发行人名称名称::=选择rdnsequence } {rdnsequence::=序列relativedistinguishednamerelativedistinguishedname::=套attributevalueassertionattributevalueassertion::=序列{AttributeType,属性值}AttributeType::=对象标识符属性值::=任何的
Name
描述了一个由属性层次的名称,如国家的名字,和对应的值,如美国。
AttributeValue
组件的类型是由
AttributeType
确定;一般来说这将是一个
directoryString
。一个
directoryString
通常是一个
PrintableString
,
TeletexString
或
UniversalString
。
public X500Principal getIssuerX500Principal()
X500Principal
。
建议子类重写此方法。
X500Principal
尊贵的名字
public abstract Principal getSubjectDN()
subject
作为具体实现的主要目标,而不应依赖可移植代码。
得到subject
(主题可分辨名称)从证书的价值。如果subject
值为空,则返回getName()
的Principal
对象返回一个空字符串(“”)的方法。
ASN。此1定义:
课题名称
看到Name
和其他相关的定义getIssuerDN
。
public X500Principal getSubjectX500Principal()
X500Principal
。如果标的值为空,则返回的
X500Principal
对象返回一个空字符串(“”)
getName()
方法。
建议子类重写此方法。
X500Principal
杰出代表
public abstract Date getNotBefore()
notBefore
日期。有关ASN. 1定义:
效力有效性::=序列先certificatevaliditydate,之后,certificatevaliditydate }certificatevaliditydate::=选择{UTCTime UTCTime,generaltime generalizedtime }
checkValidity()
public abstract Date getNotAfter()
notAfter
日期。看到有关ASN
getNotBefore
1定义。
checkValidity()
public abstract byte[] getTBSCertificate() throws CertificateEncodingException
tbsCertificate
。这可以用来独立验证签名。
CertificateEncodingException
-如果一个编码错误发生。
public abstract byte[] getSignature()
signature
值(原始签名位)从证书。ASN。这1的定义是:
签名位串
public abstract String getSigAlgName()
algorithmidentifier签名算法algorithmidentifier::=序列{算法对象标识符,参数定义的算法可选}-包含类型的值——注册用的——算法对象标识符值
该算法的名字是从algorithm
OID字符串确定。
public abstract String getSigAlgOID()
看到有关ASN getSigAlgName
1定义。
public abstract byte[] getSigAlgParams()
AlgorithmParameters
和实例化的名称由
getSigAlgName
。
看到有关ASN getSigAlgName
1定义。
public abstract boolean[] getIssuerUniqueID()
issuerUniqueID
价值。发行人唯一的标识符是在证书中存在的,以处理随着时间的推移重用的发行人名称的可能性。RFC 3280建议的名字不被重用,合格证不利用独特的标识符。符合该配置文件的应用程序应该能够解析唯一标识符并进行比较。
ASN。此1定义:
issueruniqueid [ 1 ]隐uniqueidentifier可选UniqueIdentifier::=比特串
public abstract boolean[] getSubjectUniqueID()
subjectUniqueID
价值。
ASN。此1定义:
subjectuniqueid [ 2 ]隐uniqueidentifier可选UniqueIdentifier::=比特串
public abstract boolean[] getKeyUsage()
KeyUsage
扩展位布尔数组(OID = 2.5.29.15)。该密钥使用扩展定义的目的(例如,加密、签名、证书签名)的关键文件。ASN。这1的定义是:
keyusage::=字符串{数字签名(0),不可否认性(1),(2)keyencipherment,(3)dataencipherment,密钥协商(4),(5)keycertsign,(6)crlsign,(7)encipheronly,decipheronly(8)}RFC 3280建议使用时,这个被标记为关键扩展。
public List<String> getExtendedKeyUsage() throws CertificateParsingException
ExtKeyUsageSyntax
领域对象标识符字符串的一个不可修改的列表,(OID = 2.5.29.37)。它表示的一个或多个目的,可以使用认证的公共密钥,除了或代替在密钥使用扩展字段中表示的基本目的之外。ASN。这1的定义是:
extkeyusagesyntax::=序列大小(1。最大的keypurposeid)keypurposeid::=对象标识符关键目的可以通过任何有需要的组织定义。对象标识符,用来识别关键应当按照IANA或ITU-T Rec. x.660 | ISO IEC/ITU 9834-1。
这种方法被添加到版本1.4的java 2平台标准版。为了保持与现有服务提供商的向后兼容性,这种方法是不abstract
,它提供了一个默认的实现。子类应重写此方法,以正确的实现。
CertificateParsingException
如果扩展无法解码
public abstract int getBasicConstraints()
BasicConstraints
扩展获取证书约束的路径长度,(OID = 2.5.29.19)。
的基本约束扩展标识证书的主体是一个证书颁发机构(CA)和多深的认证路径可能通过CA的pathLenConstraint
领域的存在(见下文)才有意义cA
设置为true。在这种情况下,它给出了在证书路径中可能遵循此证书的证书的最大数量。一个值为零,表明只有在路径中的最终实体证书可能会遵循。
ASN。此1定义:
basicconstraints::=序列{默认错误,pathlenconstraint整数(0。最大)可选}
pathLenConstraint
价值如果basicconstraints延伸是证书和证书的主体是CA,另有1。如果该证书的主体是CA和
pathLenConstraint
不出现,
Integer.MAX_VALUE
还表明有允许的长度没有限制的证书路径。
public Collection<List<?>> getSubjectAlternativeNames() throws CertificateParsingException
SubjectAltName
延期收藏(OID = 2.5.29.17)。
ASN的SubjectAltName
延伸1定义:
subjectaltname::=通用名通用名::=序列大小(1。最大的generalname)generalname::=选择{othername [ 0 ] othername,rfc822name [ 1 ] ia5string,[ 2 ] ia5string DnsName,x400address [ 3 ]解决,directoryname [ 4 ]的名字,edipartyname [ 5 ] EDIPartyName,uniformresourceidentifier [ 6 ] ia5string,IP地址[ 7 ]字符串,registeredid [ 8 ]对象标识符}
如果该证书不包含SubjectAltName
延伸,null
返回。否则,返回的是一Collection
代表每个GeneralName
条目列入延伸。每个条目是一个List
的第一项是一个Integer
(名称类型0-8)和其第二项是一String
或字节数组(名称、字符串或ASN。1 DER编码的形式,分别)。
RFC 822,DNS和URI的名字返回String
s,使用行之有效的字符串格式的类型(须包括在RFC 3280的限制)。IPv4地址的名字还用星罗棋布的符号。IPv6地址名称的形式是“A1返回:A2:…:A8”,在搭配是十六进制值表示地址的八个16位的块。OID名称为代表的一系列非负整数之间用句点分隔String
s返回。和目录的名称(可分辨名称)是 RFC 2253字符串格式返回。没有标准的格式字符串的定义但是,X.400名称、EDI政党名称,或任何其他类型的名称。他们是作为字节数组返回含有ASN。1 DER编码的名称形式。
请注意,Collection
返回可能包含多个名称相同的类型。另外,请注意,返回的Collection
是永恒的,任何包含的字节数组项克隆防止随后的修改。
这种方法被添加到版本1.4的java 2平台标准版。为了保持与现有服务提供商的向后兼容性,这种方法是不abstract
,它提供了一个默认的实现。子类应重写此方法,以正确的实现。
Collection
替代名称(或
null
)
CertificateParsingException
如果扩展无法解码
public Collection<List<?>> getIssuerAlternativeNames() throws CertificateParsingException
IssuerAltName
延期收藏(OID = 2.5.29.18)。
ASN的IssuerAltName
延伸1定义:
issueraltname::=通用名ASN,
GeneralNames
1定义在
getSubjectAlternativeNames
如果该证书不包含IssuerAltName
延伸,null
返回。否则,返回的是一Collection
代表每个GeneralName
条目列入延伸。每个条目是一个List
的第一项是一个Integer
(名称类型0-8)和其第二项是一String
或字节数组(名称、字符串或ASN。1 DER编码的形式,分别)。有关用于每个名称类型格式的更多细节,看getSubjectAlternativeNames
方法。
请注意,Collection
返回可能包含多个名称相同的类型。另外,请注意,返回的Collection
是永恒的,任何包含的字节数组项克隆防止随后的修改。
这种方法被添加到版本1.4的java 2平台标准版。为了保持与现有服务提供商的向后兼容性,这种方法是不abstract
,它提供了一个默认的实现。子类应重写此方法,以正确的实现。
Collection
(或
null
)
CertificateParsingException
如果扩展无法解码
public void verify(PublicKey key, Provider sigProvider) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, SignatureException
abstract
,它提供了一个默认的实现。
verify
方法重写,继承类
Certificate
key
-用来进行验证的公钥。
sigProvider
-签名提供商。
NoSuchAlgorithmException
-不支持的签名算法。
InvalidKeyException
-错误的关键。
SignatureException
-签名错误。
CertificateException
-编码错误。
UnsupportedOperationException
如果方法不受支持
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.