Operaciones con certificados

Verificar una firma

Para verificar la firma necesitamos la llave privada

 
openssl req -in newcert.req -noout -verify -key cert.key 
              

La llave privada puede encontrarse en el mismo fichero que el certificado como vimos en ejemplos anteriores.

Mostrar detalles del certificado

 
openssl req -in newcert.req -noout -text 
              

Comprobar los datos de un certificado

Para ver la información general sobre un certificado:

 
openssl s_server -cert mycert.pem -www 
              

Para ver el emisor del certificado

 
openssl x509 -noout -in cert.pem -issuer 
              

Para ver el propietario del certificado

 
openssl x509 -noout -in cert.pem -subject 
              

Para ver su periodo de validez

 
openssl x509 -noout -in cert.pem -dates 
              

Con más de una opción a la vez

 
openssl x509 -noout -in cert.pem -issuer -subject -dates 
              

El el valor hash

 
openssl x509 -noout -in cert.pem -hash 
              

Ver la huella digital MD5

 
openssl x509 -noout -in cert.pem -fingerprint 
              

Mostrar la huella digital SHA1 de un certificado

 
openssl x509 -sha1 -in cert.pem -noout -fingerprint 
              

Mostrar el contenido de un certificado

 
openssl x509 -in cert.pem -noout -text 
              

Mostrar el número de serie de un certificado

 
openssl x509 -in cert.pem -noout -serial 
              

Mostrar el propietario de un certificado en formato RFC2253

 
openssl x509 -in cert.pem -noout -subject -nameopt RFC2253 
              

Mostrar el propietario de un certificado en una línea en un terminal con UTF8

 
openssl x509 -in cert.pem -noout -subject -nameopt oneline,-escmsb 
              

Cambiar el alias de un certificado

Crear un certificado del confianza para uso de clientes SSL cambiando su alias a "Steve's Class 1 CA"

openssl x509 -in cert.pem -addtrust clientAuth \

 
              -setalias "Steve's Class 1 CA" -out trust.pem 
              

Recoger certificado remoto

 
openssl s_client -connect host:puerto 
              

Podemos ver un script para recoger certificados:

 
#!/bin/sh
#
# usage: retrieve-cert.sh remote.host.name [port]
#
REMHOST=$1
REMPORT=${2:-443}
openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |\
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' 
              

Cambiar el formato de un certificado

Convertir un certificado a solicitud de certificado

 
openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem 
              

Convertir una solicitud de certificado en un certificado autofirmado usando extensiones para una CA

 
openssl x509 -req -in careq.pem \
     -extfile openssl.cnf -extensions v3_ca \
     -signkey key.pem -out cacert.pem 
              

Convertir un certificado de formato PEM a DER

 
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER 
              

Importar y exportar certificados PKCS#12

Los ficheros PKCS#12 se pueden exportar desde diversas aplicaciones, como por ejemplo Microsoft IIS. Con frecuencia están asociados a la extensión .pfx.

Paa crear un certificado PKCS#12 primero necesitamos una llave privada y un certificado. Durante el proceso de conversión tiene la posibilidad de de introducir una contraseña de exportación para el certificado, que puede ser nula.

# Primero creamos un fichero con la llave privada y el certificado autofirmado

 
openssl req \
  -x509 -nodes -days 365 \
  -newkey rsa:1024 -keyout mycert.pem -out mycert.pem 
              

# exportamos mycert.pem como fichero PKCS#12: mycert.pfx

 
openssl pkcs12 -export \
  -out mycert.pfx -in mycert.pem \
  -name "Mi certificado" 
              

Si alguien le envía un certificado PKCS#12 necesario y protegido por contraseña, se puede exportar en formato PEM estándar.

# exportar certificado sin clave

 
openssl pkcs12 -in mycert.pfx -out mycert.pem -nodes 
              

# exportar el certificado pero cambiándole la clave

 
openssl pkcs12 -in mycert.pfx -out mycert.pem 
              

Verificaciones de certificados

Las aplicaciones enlazadas con la biblioteca OpenSSL pueden verificar certificados firmados por un CA reconocido.

Para verificar un certificado usamos la orden verify de openssl:

 
openssl verify cert.pem 
              

Si el certificado es correcto la aplicación responde con un ?OK?. Si no es correcto emite el mensaje correspondiente.

Por ejemplo:

 
error 10 at 0 depth lookup:certificate has expired. 
              

Indica que el certificado ha sobrepasado su periodo de vigencia.

 
error 18 at 0 depth lookup:self signed certificate. 
              

openssl no verifica certificados autofirmados.