Hola Habr! Les presento la traducción del artículo final "Certificado de Java" por Jakob Jenkov de una serie de artículos para principiantes que desean aprender los conceptos básicos de la criptografía en Java.
Tabla de contenido:
- Criptografía Java
- Cifrado de Java
- Messagedigest
- Mac
- Firma
- Par de llaves
- Generador de claves
- KeyPairGenerator
- Keystore
- Keytool
- Certificado
- CertificateFactory
- CertPath
Certificado de Java
La clase de certificado ( java.security.cert.Certificate ) es un certificado que certifica que una entidad pertenece, por ejemplo, a un usuario. La instancia de clase de certificado contiene el nombre y otra información sobre el objeto que identifica, así como, posiblemente, una firma digital de una autoridad de certificación (CA). La clase Certificate
es una clase abstracta, por lo tanto, puede usar Certificate
como el tipo de variable, y su variable siempre apuntará a una subclase. Esta clase tiene una subclase: X509Certificate
, que representa el certificado X.509, que se utiliza como certificado en los protocolos HTTPS y TLS.
Obtención de una instancia de certificado
Puede obtener una instancia de certificado de las siguientes maneras:
Consulte estas dos guías para obtener más información sobre cómo obtener una instancia de certificado.
getEncoded ()
El método getEncoded()
del certificado devuelve la versión codificada del certificado como una matriz de bytes. Por ejemplo, si el certificado es un certificado X509, la matriz de bytes devuelta contendrá una versión codificada X.590 de la instancia de certificado (ASN.1 DER). Aquí hay un ejemplo usando el método getEncoded()
:
byte[] encodedCertificate = certificate.getEncoded();
getPublicKey ()
El método de certificado getPublicKey()
devuelve la clave pública de esta instancia de certificado. Aquí hay un ejemplo del método getPublicKey()
:
PublicKey certificatePublicKey = certificate.getPublicKey();
getType ()
El método getType()
devuelve el tipo de instancia de certificado. Ejemplo getType()
:
String certificateType = certificate.getType();
verificar ()
La clase de certificado contiene tres métodos de verify()
. Estos métodos se pueden usar para verificar que el certificado esté firmado con la clave privada correspondiente a la clave pública esperada. Aquí hay un ejemplo de verificación de certificado:
El método verify()
no devuelve un valor. Si la prueba falla, se InvalidKeyException
una InvalidKeyException
. Si no se produce ninguna excepción, la instancia del certificado puede considerarse verificada.
Java CertificateFactory (Fábrica de certificados
La clase CertificateFactory
( java.security.cert.CertificateFactory ) es capaz de crear instancias de certificados ( Certificate
) a partir de datos binarios para certificados con codificación X.509 (ASN.1 DER). CertificateFactory
también puede crear instancias de CertPath
. CertPath
es una cadena de certificados, donde cada certificado está firmado por el siguiente certificado en esta cadena.
Crear una instancia de CertificateFactory
Antes de poder crear instancias de Certificate
, debe crear una instancia de CertificateFactory
. Un ejemplo:
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
Este ejemplo crea una instancia de CertificateFactory
, capaz de crear instancias de un certificado X.509 ( X509Certificate
es una subclase de Certificate
).
Crear instancia de certificado
Al crear una instancia de CertificateFactory
, puede comenzar a crear instancias de Certificate
. Esto se hace llamando al método generateCertificate()
. Un ejemplo de llamar al método generateCertificate()
:
InputStream certificateInputStream = new FileInputStream("my-x509-certificate.crt"); Certificate certificate = certificateFactory.generateCertificate(certificateInputStream);
Crear una instancia de CertPath
CertificateFactory
también puede crear instancias de CertPath
. Una instancia de CertPath
crea llamando al método generateCertPath()
:
InputStream certificateInputStream = new FileInputStream("my-x509-certificate-chain.crt"); CertPath certPath = certificateFactory.generateCertPath(certificateInputStream);
Java CertPath (cadena de certificados)
La clase CertPath
( java.security.cert.CertPath ) representa una cadena de certificados (objetos de Certificate
), donde cada certificado es un firmante digital del siguiente certificado en la cadena. La clase CertPath
usa generalmente para verificar un certificado de identidad, junto con los certificados de las autoridades de certificación (CA) que han firmado el certificado.
Obtener una instancia de CertPath
Normalmente, una instancia de CertPath
obtiene de una fábrica de certificados ( CertificateFactory CertPathBuilder
).
getCertificates ()
Una vez que obtiene la instancia de CertPath
, puede obtener las instancias de Certificate
que CertPath
consiste llamando al método getCertificates()
. Aquí hay un ejemplo de CertPath
obtener certificados de una instancia de CertPath
:
List<Certificate> certificates = certPath.getCertificates();
getType ()
El método getType()
devuelve una cadena que indica qué tipo de certificados (por ejemplo, X.509) está contenido en esta instancia de CertPath
. Aquí hay un ejemplo de cómo obtener el tipo CertPath
través del método getType()
:
String type = certPath.getType();