Recientemente, he tenido la necesidad de obtener el certificado de un servidor. Esto es muy fácil de hacer con firefox, pero por vicisitudes varias y filtrados de IP, sólo lo podía hacer desde una Ubuntu sin entorno gráfico. Así pues, la solución está en openssl.

Para poder probar el ejemplo, lo veremos con los certificados de twitter.

Con el siguiente comando, podemos obtener la información del certificado:

openssl s_client -connect twitter.com:443 > twitterCert

El comando s_client de openSSL implementa un cliente genérico que se conecta a un host remoto que usa SSL/TLS. Con el argumento -connect host:port, indicamos la dirección del host y al puerto al que nos conectaremos (lo normal será que nos conectemos al 443.

Escribimos “quit” y apretamos intro, pues ya tenemos todo lo que queríamos.

Abriendo el fichero twitterCert, encontraremos la información del certificado entre los bloques BEGIN CERTIFICATE y END CERTIFICATE. Guardamos estos datos en un fichero que llamaremos, por ejemplo, twitterCert.pem.

Para ver la información del certificado y de paso verificar si es correcta, podemos emplear el comando:

openssl x509 -inform PEM -in twitterCert.pem-text -out twitterCertData

El comando x509 es una utilidad de certificados. Podemos usarlo para mostrar información de un certificado, convertir certificados a varios formatos, etc.

Con el atributo -inform DER|PEM|NET, especificamos el formato de entrada. El formato PEM es la codificación en base64de la codificación DER, con las líneas de cabecera y pie. Este es el que tenemos en nuestro caso.

-in nos sirve para especificar el fichero de entrada.

Mediante la opción -text, imprimiremos la información del certificado en texto y podremos ver datos tales como el número de serie, algoritmo de firma, emisor del certificado, OCSP, dns, etc.
Con -out especificaremos el fichero de salida.

Así pues, el fichero twitterCertData tendrá información en texto del certificado, seguida del certificado en formato PEM.

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            66:44:2f:71:e3:ab:97:0b:fd:54:b9:23:94:e9:da:5f
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=Terms of use at https://www.verisign.com/rpa (c)06, CN=VeriSign Class 3 Extended Validation SSL CA
        Validity
            Not Before: Jul 27 00:00:00 2010 GMT
            Not After : Jul 27 23:59:59 2011 GMT
        Subject: 1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/2.5.4.15=Private Organization/serialNumber=4337446, C=US/postalCode=94107, ST=California, L=San Francisco/streetAddress=795 Folsom St, Suite 600, O=Twitter, Inc., OU=Twitter  Operations, CN=twitter.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:bf:61:5c:af:fa:42:77:5a:ee:4a:a8:95:b9:6d:
                    31:ad:00:5d:fe:44:71:f7:ef:eb:d7:7e:5c:cf:0a:
                    e4:2f:41:15:98:66:4e:a3:e6:3f:3c:f3:9b:d6:47:
                    13:b2:ad:d6:35:26:72:ca:18:e5:6f:d4:b8:69:56:
                    c8:ae:20:4f:00:b3:ae:8c:fe:ae:c2:dd:93:71:26:
                    82:7f:d3:30:e5:46:d7:0b:4b:a3:d3:7c:55:4b:7a:
                    4e:d8:d7:e3:af:c7:07:a3:b3:de:0a:1d:34:ed:e8:
                    c4:ab:5e:18:1f:de:19:9d:d5:eb:2f:eb:d7:26:e5:
                    ba:3e:0f:0c:fa:8b:17:00:01:52:5f:c3:2b:8d:c9:
                    1b:ed:b8:84:35:88:ba:5e:9c:ef:bb:a2:f5:a8:d4:
                    b8:ce:11:51:c6:e1:2f:f7:37:ee:66:a0:11:c6:c1:
                    f2:78:de:83:a2:ef:25:6e:32:fa:ba:9b:aa:d0:83:
                    6a:6f:84:e1:46:84:2d:e9:d2:c8:e0:62:84:bd:80:
                    e8:1b:60:1a:5d:c5:0b:b7:e4:3a:f4:f7:71:13:11:
                    d9:69:19:51:bf:df:89:67:ea:1b:8c:1a:2e:97:84:
                    31:ad:78:7f:d6:09:05:c6:a4:19:fe:35:93:bd:65:
                    25:92:28:0d:b2:71:63:0a:00:ec:a3:5b:69:48:22:
                    a0:09
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:www.twitter.com, DNS:twitter.com
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Subject Key Identifier:
                C4:45:4C:55:53:60:CA:11:C9:09:7E:F6:08:2A:5B:8A:E6:42:86:10
            X509v3 Key Usage:
                Digital Signature, Key Encipherment
            X509v3 CRL Distribution Points:
                URI:http://EVSecure-crl.verisign.com/EVSecure2006.crl
            X509v3 Certificate Policies:
                Policy: 2.16.840.1.113733.1.7.23.6
                  CPS: https://www.verisign.com/rpa
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Authority Key Identifier:
                keyid:FC:8A:50:BA:9E:B9:25:5A:7B:55:85:4F:95:00:63:8F:E9:58:6B:43
            Authority Information Access:
                OCSP - URI:http://EVSecure-ocsp.verisign.com
                CA Issuers - URI:http://EVSecure-aia.verisign.com/EVSecure2006.cer
            1.3.6.1.5.5.7.1.12:
                0`.^.\0Z0X0V..image/gif0!0.0...+......Kk.(.....R8.).K..!..0&.$http://logo.verisign.com/vslogo1.gif
    Signature Algorithm: sha1WithRSAEncryption
        6a:17:dd:5c:0d:97:5f:47:89:5d:00:58:74:18:cb:4f:e5:79:
        7f:6d:f3:d8:6f:09:c4:a4:c3:88:92:b2:fa:28:8c:4d:14:fb:
        8e:fa:f2:ea:9e:14:24:e6:03:a1:ee:c3:9e:46:94:0e:2c:ec:
        be:ae:cf:7d:96:8b:9b:70:91:39:e3:af:05:07:88:48:3e:a2:
        85:04:9d:70:6d:88:20:2b:00:56:20:2c:c3:32:b1:66:42:b3:
        5f:e4:f7:92:5b:70:b9:ed:12:14:29:8b:4e:8b:cd:ac:52:9f:
        31:a7:ea:8c:ef:7f:b6:ce:e6:c3:b2:10:d7:9c:cd:b1:b2:19:
        0a:2f:33:5c:22:20:ea:de:99:eb:f5:fd:ad:24:18:a9:3c:f7:
        0c:2f:49:8a:fe:4c:80:13:d2:75:41:94:e4:02:d4:0f:61:c7:
        a6:64:49:7c:92:37:19:67:e0:e2:91:12:8c:49:d4:ca:ea:f1:
        eb:6a:f2:85:1b:5d:68:50:37:d9:80:a6:86:c4:32:3d:59:dd:
        ee:14:bb:14:3f:f8:13:cb:a3:bc:7e:ce:cd:2e:27:4a:bb:c6:
        fb:25:0e:39:ef:79:97:5b:4e:1f:70:bd:aa:bc:78:15:9c:9a:
        66:8d:54:e0:3f:6a:87:32:23:6d:d4:0d:3d:dd:67:5c:84:9e:
        0b:0a:f8:dc
-----BEGIN CERTIFICATE-----
MIIGfzCCBWegAwIBAgIQZkQvceOrlwv9VLkjlOnaXzANBgkqhkiG9w0BAQUFADCB
ujELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug
YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMr
VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTAeFw0x
MDA3MjcwMDAwMDBaFw0xMTA3MjcyMzU5NTlaMIIBGjETMBEGCysGAQQBgjc8AgED
EwJVUzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTEdMBsGA1UEDxMUUHJpdmF0
ZSBPcmdhbml6YXRpb24xEDAOBgNVBAUTBzQzMzc0NDYxCzAJBgNVBAYTAlVTMQ4w
DAYDVQQRFAU5NDEwNzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxQNU2Fu
IEZyYW5jaXNjbzEhMB8GA1UECRQYNzk1IEZvbHNvbSBTdCwgU3VpdGUgNjAwMRYw
FAYDVQQKFA1Ud2l0dGVyLCBJbmMuMRwwGgYDVQQLFBNUd2l0dGVyICBPcGVyYXRp
b25zMRQwEgYDVQQDFAt0d2l0dGVyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAL9hXK/6Qnda7kqolbltMa0AXf5Ecffv69d+XM8K5C9BFZhmTqPm
Pzzzm9ZHE7Kt1jUmcsoY5W/UuGlWyK4gTwCzroz+rsLdk3Emgn/TMOVG1wtLo9N8
VUt6TtjX46/HB6Oz3godNO3oxKteGB/eGZ3V6y/r1ybluj4PDPqLFwABUl/DK43J
G+24hDWIul6c77ui9ajUuM4RUcbhL/c37magEcbB8njeg6LvJW4y+rqbqtCDam+E
4UaELenSyOBihL2A6BtgGl3FC7fkOvT3cRMR2WkZUb/fiWfqG4waLpeEMa14f9YJ
BcakGf41k71lJZIoDbJxYwoA7KNbaUgioAkCAwEAAaOCAhwwggIYMCcGA1UdEQQg
MB6CD3d3dy50d2l0dGVyLmNvbYILdHdpdHRlci5jb20wCQYDVR0TBAIwADAdBgNV
HQ4EFgQUxEVMVVNgyhHJCX72CCpbiuZChhAwCwYDVR0PBAQDAgWgMEIGA1UdHwQ7
MDkwN6A1oDOGMWh0dHA6Ly9FVlNlY3VyZS1jcmwudmVyaXNpZ24uY29tL0VWU2Vj
dXJlMjAwNi5jcmwwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXBjAqMCgGCCsGAQUF
BwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMB0GA1UdJQQWMBQGCCsG
AQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAWgBT8ilC6nrklWntVhU+VAGOP6Vhr
QzB8BggrBgEFBQcBAQRwMG4wLQYIKwYBBQUHMAGGIWh0dHA6Ly9FVlNlY3VyZS1v
Y3NwLnZlcmlzaWduLmNvbTA9BggrBgEFBQcwAoYxaHR0cDovL0VWU2VjdXJlLWFp
YS52ZXJpc2lnbi5jb20vRVZTZWN1cmUyMDA2LmNlcjBuBggrBgEFBQcBDARiMGCh
XqBcMFowWDBWFglpbWFnZS9naWYwITAfMAcGBSsOAwIaBBRLa7kolgYMu9BSOJsp
rEsHiyEFGDAmFiRodHRwOi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYw
DQYJKoZIhvcNAQEFBQADggEBAGoX3VwNl19HiV0AWHQYy0/leX9t89hvCcSkw4iS
svoojE0U+4768uqeFCTmA6Huw55GlA4s7L6uz32Wi5twkTnjrwUHiEg+ooUEnXBt
iCArAFYgLMMysWZCs1/k95JbcLntEhQpi06LzaxSnzGn6ozvf7bO5sOyENeczbGy
GQovM1wiIOremev1/a0kGKk89wwvSYr+TIAT0nVBlOQC1A9hx6ZkSXySNxln4OKR
EoxJ1Mrq8etq8oUbXWhQN9mApobEMj1Z3e4UuxQ/+BPLo7x+zs0uJ0q7xvslDjnv
eZdbTh9wvaq8eBWcmmaNVOA/aocyI23UDT3dZ1yEngsK+Nw=
-----END CERTIFICATE-----

Fuentes:
Documentación oficial de cURL – http://curl.haxx.se/docs/sslcerts.html
Documentación oficial de openSSL – http://www.openssl.org/docs/

About these ads