Guía de desarrollo

Local Navigation

Certificados

Un certificado es un documento electrónico que se utiliza para identificar a una persona, empresa u otra entidad, y para asociar dicha entidad con una clave pública. Los certificados utilizan una firma digital para enlazar la clave pública con una identidad. Cuando una entidad desea utilizar un certificado, ésta puede comprobar la firma con el fin de asegurarse de que la clave proporcionada es legítima.

Las autoridades de certificación son empresas dedicadas a la publicación de certificados y validación de identidades. Si bien los certificados pueden firmarse de forma automática, es la autoridad de certificación la que, por lo general, se encarga de esta tarea.

Puede gestionar certificados con el paquete net.rim.device.api.crypto.certificate.

Todos los certificados almacenados en los dispositivos BlackBerry cuentan con un estado de certificado. Este dato ofrece información acerca de los posibles estados del certificado: bueno, revocado o desconocido. La gestión de los valores del estado corre a cargo de net.rim.device.api.crypto.keystore.CertificateStatusManager class.

Ejemplo de código: crear un certificado

Si dispone de la codificación para un certificado, puede utilizar un código como el que se muestra a continuación para crear un certificado X.509. Sustituya el texto <encoding> por un valor apropiado:

byte[] encoding = encoding;
X509Certificate certificate = new X509Certificate( <encoding> );

También puede utilizar una factoría de certificados para crear un certificado a partir de su codificación. La factoría de certificados puede leer los certificados X.509 y WTLS. Por ejemplo:

InputStream encoding = encoding;
Certificate certificate = CertificateFactory.getInstance( "X509",encoding );

Para crear un nuevo certificado X.509, invoque X509Certificate.createCertificate(). El siguiente código de ejemplo crea un certificado raíz (certificados en los que el emisor y el sujeto son los mismos).

RSAKeyPair keyPair = new RSAKeyPair( new RSACryptoSystem() );
X509DistinguishedName name = new X509DistinguishedName(
    "O=Research In Motion,C=Canada" );
long keyUsage = KeyUsage.KEY_CERT_SIGN;
byte[] serialNumber = new byte[] { (byte)0x01 };
long validNotBefore = System.currentTimeMillis(); // Add a year of milliseconds.
long validNotAfter = validNotBefore + 1000*60*60*24*365;
X509Certificate root = X509Certificate.createX509Certificate( keyPair,
                          name, keyUsage, serialNumber, null,
                          validNotBefore, validNotAfter );

Cadenas de certificados

La interfaz Certificate también admite cadenas de certificados. Una cadena de certificados es un conjunto de certificados que ofrece un mayor nivel de seguridad en comparación con los certificados sencillos.

Existen varias formas de crear una cadena de certificados.

Si todos los certificados son objetos individuales, puede colocarlos en una matriz.

Certificate endEntity = ...
Certificate firstCA = ...
Certificate rootCA = ...
Certificate[] chain = new Certificate[] { endEntity, firstCA, rootCA };

De forma alternativa, puede utilizar el método buildCertificateChain, que se encuentra en la clase CertificateUtilities. En el siguiente ejemplo, se da por hecho que una de las autoridades de certificación se encuentra en una matriz de certificados y la otra, en un almacén de claves.

Certificate endEntity = ...
Certificate[] pool = ... ( contains firstCA )
KeyStore keyStore = ... ( contains rootCA )
Certificate[] chain = CertificateUtilities.buildCertChain( endEntity,
                      pool, keyStore );

Puede utilizar el siguiente código para determinar si la cadena es de confianza.

KeyStore trustedKeyStore = TrustedKeyStore.getInstance();
boolean trusted = CertificateUtilities.isCertificateChainTrusted( 
                  chain, trustedKeyStore )

Si lo desea, también puede intentar crear una cadena de certificados de confianza directamente. Por ejemplo:

Certificate endEntity = ...
Certificate[] pool = ... ( contains firstCA )
KeyStore keyStore = ... ( contains rootCA )
KeyStore trustedKeyStore = TrustedKeyStore.getInstance();
Certificate[] trustedChain = CertificateUtilities.buildTrustedCertChain(
                             endEntity, pool,keyStore, trustedKeyStore );
Tema siguiente: Firmas

¿Le ha resultado útil esta información? Envíenos sus comentarios.