|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Objectice.cert.X509Certificate
Implementation of the jdk 1.2 java.security.cert.X509Certificates class.
In order to keep the downward compatibility with jdk 1.1, this
class does not extend the jdk 1.2 class. However
all the functionality are implemented.
This class provides a standard way to access all the attributes of an X.509 certificate. It does not however implement certificate extensions.
The basic X.509 v3 format is described below in ASN.1:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING }
These certificates are widely used to support authentication and other functionality in Internet security systems. Common applications include Privacy Enhanced Mail (PEM), Transport Layer Security (SSL), code signing for trusted software distribution, and Secure Electronic Transactions (SET).
These certificates are managed and vouched for by Certificate Authorities (CAs). CAs are services which create certificates by placing data in the X.509 standard format and then digitally signing that data. CAs act as trusted third parties, making introductions between principals who have no direct knowledge of each other. CA certificates are either signed by themselves, or by some other CA such as a "root" CA.
A good decription and profiling is provided in the IETF PKIX WG draft, Part I: X.509 Certificate and CRL Profile, <draft-ietf-pkix-ipki-part1-07.txt>.
The ASN.1 definition of tbsCertificate is:
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version must be v2 or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version must be v2 or v3
extensions [3] EXPLICIT Extensions OPTIONAL
-- If present, version must be v3
}
Certificates are instantiated using a certificate factory. The following is an example of how to instantiate a ice-specific X.509 certificate:
InputStream inStream = new FileInputStream("fileName-of-cert");
ice.cert.X509CertificateFactory cf = new ice.cert.X509CertificateFactory();
ice.cert.X509Certificate cert = cf.generateCertificate(inStream);
inStream.close();
This implementation is compliant to the specifications given in
jdk1.2's java.security.cert.X509Certificate. However
few differences can be noticed:
X509CertificateFactory,
Serialized Form| Method Summary | |
void |
checkValidity()
Checks that the certificate is currently valid. |
void |
checkValidity(Date date)
Checks that the given date is within the certificate's validity period. |
boolean |
equals(Object other)
Compares this certificate for equality with the specified object. |
int |
getBasicConstraints()
Gets the certificate constraints path length from the critical BasicConstraints extension, (OID = 2.5.29.19). |
byte[] |
getEncoded()
Returns the encoded form of this certificate. |
X500Name |
getIssuer()
Returns the distinguished name of the certificate issuer |
Principal |
getIssuerDN()
Gets the issuer (issuer distinguished name) value from
the certificate. |
boolean[] |
getIssuerUniqueID()
Gets the issuerUniqueID value from the certificate. |
boolean[] |
getKeyUsage()
Gets a boolean array representing bits of the KeyUsage extension, (OID = 2.5.29.15). |
Date |
getNotAfter()
Gets the notAfter date from the validity period of
the certificate. |
Date |
getNotBefore()
Gets the notBefore date from the validity period of
the certificate. |
PublicKey |
getPublicKey()
Gets the public key from this certificate. |
BigInteger |
getSerialNumber()
Gets the serialNumber value from the certificate. |
String |
getSigAlgName()
Gets the signature algorithm name for the certificate signature algorithm. |
String |
getSigAlgOID()
Gets the signature algorithm OID string from the certificate. |
byte[] |
getSigAlgParams()
Gets the DER-encoded signature algorithm parameters from this certificate's signature algorithm. |
byte[] |
getSignature()
Gets the signature value (the raw signature bits) from
the certificate. |
X500Name |
getSubject()
Returns the distinguished name of the certificate's owner |
Principal |
getSubjectDN()
Gets the subject (subject distinguished name) value
from the certificate. |
boolean[] |
getSubjectUniqueID()
Gets the subjectUniqueID value from the certificate. |
byte[] |
getTBSCertificate()
Gets the DER-encoded certificate information, the tbsCertificate from this certificate. |
String |
getType()
Returns the type of this certificate. |
int |
getVersion()
Gets the version (version number) value from the
certificate. |
int |
hashCode()
Returns a hashcode value for this certificate from its encoded form. |
void |
save(OutputStream out)
Save this certificate in binary form. |
void |
saveAsText(OutputStream out)
Save this certificate in text form. |
static void |
saveChain(X509Certificate[] chain,
OutputStream out)
Saves a certificate chain in binary form. |
static void |
saveChainAsText(X509Certificate[] chain,
OutputStream out)
Saves a certificate chain in text form. |
String |
toString()
|
void |
verify(PublicKey key)
Verifies that this certificate was signed using the private key that corresponds to the specified public key. |
void |
verify(PublicKey key,
String sigProvider)
Verifies that this certificate was signed using the private key that corresponds to the specified public key. |
| Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
| Method Detail |
public void checkValidity()
throws CertificateExpiredException,
CertificateNotYetValidException
The validity period consists of two date/time values: the first and last dates (and times) on which the certificate is valid. It is defined in ASN.1 as:
validity ValidityValidity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }
CertificateExpiredException - if the certificate has expired.
CertificateNotYetValidException - if the certificate is not
yet valid.
public void checkValidity(Date date)
throws CertificateExpiredException,
CertificateNotYetValidException
date - the Date to check against to see if this certificate
is valid at that date/time.
CertificateExpiredException - if the certificate has expired
with respect to the date supplied.
CertificateNotYetValidException - if the certificate is not
yet valid with respect to the date supplied.checkValidity()public int getBasicConstraints()
BasicConstraints extension, (OID = 2.5.29.19).
The basic constraints extension identifies whether the subject
of the certificate is a Certificate Authority (CA) and
how deep a certification path may exist through that CA. The
pathLenConstraint field (see below) is meaningful
only if cA is set to TRUE. In this case, it gives the
maximum number of CA certificates that may follow this certificate in a
certification path. A value of zero indicates that only an end-entity
certificate may follow in the path.
Note that for the PKIX profile this extension is always marked
critical if cA is TRUE, meaning this certificate belongs
to a Certificate Authority.
The ASN.1 definition for this is:
BasicConstraints ::= SEQUENCE {
cA BOOLEAN DEFAULT FALSE,
pathLenConstraint INTEGER (0..MAX) OPTIONAL }
cA value is TRUE.
Otherwise returns -1.public Principal getIssuerDN()
issuer (issuer distinguished name) value from
the certificate. The issuer name identifies the entity that signed (and
issued) the certificate.
The issuer name field contains an X.500 distinguished name (DN). The ASN.1 definition for this is:
issuer NameTheName ::= CHOICE { RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName RelativeDistinguishedName ::= SET OF AttributeValueAssertion AttributeValueAssertion ::= SEQUENCE { AttributeType, AttributeValue } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY
Name describes a hierarchical name composed of
attributes,
such as country name, and corresponding values, such as US.
The type of the AttributeValue component is determined by
the AttributeType; in general it will be a
directoryString. A directoryString is usually
one of PrintableString,
TeletexString or UniversalString.
ice.cert.X500NameX500Namepublic boolean[] getIssuerUniqueID()
issuerUniqueID value from the certificate.
The issuer unique identifier is present in the certificate
to handle the possibility of reuse of issuer names over time.
The PKIX Part I recommends that names not be reused and that
conforming certificates not make use of unique identifiers.
Applications conforming to that profile should be capable of
parsing unique identifiers and making comparisons.
The ASN.1 definition for this is:
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONALUniqueIdentifier ::= BIT STRING
public boolean[] getKeyUsage()
KeyUsage extension, (OID = 2.5.29.15).
The key usage extension defines the purpose (e.g., encipherment,
signature, certificate signing) of the key contained in the
certificate.
The ASN.1 definition for this is:
KeyUsage ::= BIT STRING {
digitalSignature (0),
nonRepudiation (1),
keyEncipherment (2),
dataEncipherment (3),
keyAgreement (4),
keyCertSign (5),
cRLSign (6),
encipherOnly (7),
decipherOnly (8) }
The PKIX part I draft recommends that when used, this be marked
as a critical extension.
public Date getNotAfter()
notAfter date from the validity period of
the certificate. See getNotBefore()
for relevant ASN.1 definitions.
checkValidity()public Date getNotBefore()
notBefore date from the validity period of
the certificate.
The relevant ASN.1 definitions are:
validity ValidityValidity ::= SEQUENCE { notBefore CertificateValidityDate, notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime }
checkValidity()public BigInteger getSerialNumber()
serialNumber value from the certificate.
The serial number is an integer assigned by the certification
authority to each certificate. It must be unique for each
certificate issued by a given CA (i.e., the issuer name and
serial number identify a unique certificate).
The ASN.1 definition for this is:
serialNumber CertificateSerialNumberCertificateSerialNumber ::= INTEGER
public String getSigAlgName()
signatureAlgorithm AlgorithmIdentifierAlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL } -- contains a value of the type -- registered for use with the -- algorithm object identifier value
The algorithm name is determined from the algorithm
OID string.
public String getSigAlgOID()
See getSigAlgName() for
relevant ASN.1 definitions.
public byte[] getSigAlgParams()
See getSigAlgName() for
relevant ASN.1 definitions.
public byte[] getSignature()
signature value (the raw signature bits) from
the certificate.
The ASN.1 definition for this is:
signature BIT STRING
public Principal getSubjectDN()
subject (subject distinguished name) value
from the certificate.
The ASN.1 definition for this is:
subject Name
See getIssuerDN() for Name
and other relevant definitions.
ice.cert.X500NameX500Namepublic boolean[] getSubjectUniqueID()
subjectUniqueID value from the certificate.
The ASN.1 definition for this is:
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONALUniqueIdentifier ::= BIT STRING
public byte[] getTBSCertificate()
throws CertificateEncodingException
tbsCertificate from this certificate.
This can be used to verify the signature independently.
CertificateEncodingException - if an encoding error occurs.public int getVersion()
version (version number) value from the
certificate.
The ASN.1 definition for this is:
version [0] EXPLICIT Version DEFAULT v1Version ::= INTEGER { v1(0), v2(1), v3(2) }
public byte[] getEncoded()
throws CertificateEncodingException
CertificateEncodingException - if an encoding error occurs.public PublicKey getPublicKey()
public X500Name getSubject()
public X500Name getIssuer()
public void verify(PublicKey key)
throws CertificateException,
NoSuchAlgorithmException,
InvalidKeyException,
NoSuchProviderException,
SignatureException
key - the PublicKey used to carry out the verification.
NoSuchAlgorithmException - on unsupported signature
algorithms.
InvalidKeyException - on incorrect key.
NoSuchProviderException - if there's no default provider.
SignatureException - on signature errors.
CertificateException - on encoding errors.
public void verify(PublicKey key,
String sigProvider)
throws CertificateException,
NoSuchAlgorithmException,
InvalidKeyException,
NoSuchProviderException,
SignatureException
key - the PublicKey used to carry out the verification.sigProvider - the name of the signature provider.
NoSuchAlgorithmException - on unsupported signature
algorithms.
InvalidKeyException - on incorrect key.
NoSuchProviderException - on incorrect provider.
SignatureException - on signature errors.
CertificateException - on encoding errors.
public void save(OutputStream out)
throws IOException
IOException
public void saveAsText(OutputStream out)
throws IOException
-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----
IOException
public static void saveChain(X509Certificate[] chain,
OutputStream out)
throws IOException
See RSA Security site for the PKCS#7 format.
IOException
public static void saveChainAsText(X509Certificate[] chain,
OutputStream out)
throws IOException
-----BEGIN PKCS #7 SIGNED DATA----- -----END PKCS #7 SIGNED DATA-----Be aware that this method does not check if the chain is valid.
See RSA Security site for the PKCS#7 format.
IOExceptionpublic String getType()
public boolean equals(Object other)
other object is an
instanceof X509Certificate, then
its encoded form is retrieved and compared with the
encoded form of this certificate.
other - the object to test for equality with this certificate.
public int hashCode()
public String toString()
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||