SSL y TLS
Sumario
Enlaces y referencias
- Cacert.org
- Ref: OWASP es una comunidad libre y abierta sobre seguridad en aplicaciones web.
- Ref: OpenSSL Command-Line HOWTO.
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.
- Ref: PCKS en la wikipedia
- Ref: Uso de openssl pkcs12
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.