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.