martes, 14 de enero de 2014

Operaciones con certificados

Extraido de: http://www.bdat.net/documentos/certificados_digitales/x359.html

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.

No hay comentarios:

Publicar un comentario