SSL y TLS

De Astillas.net


Enlaces y referencias

Notas sobre conceptos

PKCS#12

Los archivos en este formato -generalmente con extensión .p12- son contenedores de claves privadas junto a sus certificados de clave pública, protegido todo ello por claves simétricas.

Usos y costumbres

Inspección de certificados

Para los certificados emplear el subprograma x509 como en:

$ openssl x509 -text -noout -in ssl-cert-snakeoil.pem
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            a3:60:88:2a:89:a0:d8:be
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=cracovia.venexma.int
        Validity
            Not Before: Jun 13 07:06:05 2008 GMT
            Not After : Jun 11 07:06:05 2018 GMT
        Subject: CN=cracovia.venexma.int
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    ...............
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha1WithRSAEncryption
        ......................................................
$ 


Inspeccionar peticiones de certificación (certificate request)

Para las peticiones de certificado usar el subprograma req.

$ openssl req -text -noout -in ssl-csr-snakeoil.pem
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    .............................................
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha1WithRSAEncryption
        ......................................................
$ 

Inspeccionar contenedores pkcs12

Para obtener información sobre un contenedor de este tipo se debe emplear el subprograma pkcs12 de esta forma:

$ openssl pkcs12 -in archivo.p12 -nokeys -out archivo.pem
Enter Import Password: 
MAC verified OK
Bag Attributes
    friendlyName: FNMT Clase 2 CA - FNMT
subject=/C=ES/O=FNMT/OU=FNMT Clase 2 CA
issuer=/C=ES/O=FNMT/OU=FNMT Clase 2 CA
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Bag Attributes
    friendlyName: XXXXXXXX XXXXXXX XXXXXX XX - CIF XXXXXXXXX - NOMBRE XXXXXX XXXXXX \
XXXXXXXX - NIF XXXXXXXXX's FNMT ID
    localKeyID: 75 21 D4 AC E3 C3 AB AC 0D 36 37 F3 A6 1D F8 7E 62 E2 D5 EA
subject=/C=ES/O=FNMT/OU=FNMT Clase 2 CA/OU=XXXXXXXXX/CN=XXXXXXX XXXXXXX XXXXXX \
XX - CIF XXXXXXXXX - NOMBRE XXXXXX XXXXXX XXXXXXXX - NIF XXXXXXXXX
issuer=/C=ES/O=FNMT/OU=FNMT Clase 2 CA
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Si se excluye el parámetro --nokeys el programa pedirá una palabra de paso (con verificación) para cifrar las claves privadas que va a extraer y a situar en el archivo de salida archivo.pem.

Caducidad de certificados de servidor

Para verificar la caducidad de un certificado digital instalado en un servidor podemos abrir una conexión cifrada con el subprograma s_client de openssl:

$ openssl s_client -connect astillas.net:443
CONNECTED(00000003)
depth=0 /CN=taquiones.net
...
...
---
Certificate chain
 0 s:/CN=taquiones.net
   i:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGTDCCBDSgAwIBAgIDALroMA0GCSqGSIb3DQEBBQUAMFQxFDASBgNVBAoTC0NB
...
...
...
-----END CERTIFICATE-----
subject=/CN=taquiones.net
issuer=/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
---
...
...
...
---

que nos proporcionará -entre otras cosas- un volcado del certificado del servidor. Después, para echarle un vistazo al contenido, podemos encadenar la llamada a un segundo subprograma x509 y buscar concretamente la fecha de caducidad o cualquier otro campo como los nombres de dominio alternativos:

$ openssl s_client -connect astillas.net:443 2>/dev/null | openssl x509 -text  | egrep -i "not after"
            Not After : Oct 27 09:54:41 2012 GMT
^D
$ openssl s_client -connect astillas.net:443 2>/dev/null | openssl x509 -text  | egrep -i "dns"
            DNS:taquiones.net, othername:<unsupported>, DNS:www.taquiones.net, \
            othername:<unsupported>, DNS:mail.taquiones.net, othername:<unsupported>, \
            DNS:secure.taquiones.net, othername:<unsupported>, DNS:esferas.org, \
            othername:<unsupported>, DNS:astillas.net, othername:<unsupported>, DNS:wiki.astillas.net
^D

Envíar el carácter ^D es necesario porque s_client abre una conexión real con el servidor y si no nos interesa intercambiar más información con él necesitaremos cerrar la conexión de alguna forma genérica.