OpenSSL es el kit criptográfico que implementa los protocolos de red Secure Sockets Layer (SSL v2/v3) y Transport Layer Security (TLS v1), y los estándares criptográficos relacionados, para los sitemas operativos *nix (Solaris, GNU/Linux, Mac OS X y BSD), OpenVMS y Microsoft Windows.
En GNU/Linux, la herramienta openssl
permite utilizar varias funciones criptográficas de la librería OpenSSL desde línea de comandos. Se puede utilizar openssl
para: crear y gestionar claves públicas y privadas; realizar operaciones criptográficas con clave pública; crear certificados, CSRs y CRLs X.509; calcular digests de mensajes; encriptar y desencriptar con diferentes algoritmos de cifrado; verificar clientes y servidores SSL/TLS; manipular mensajes de correo electrónico firmados o cifrados mediante S/MIME; entre otras funciones.
openssl
provee una amplia variedad de comandos, cada uno con una gran cantidad de opciones y parámetros/argumentos, por ello cada día se puede aprender algo nuevo con esta herramienta.
Cuando se usa openssl
con el comando s_client
, funciona como un cliente SSL/TLS genérico que es capaz de establecer una conexión transparente a un servidor remoto con soporte SSL/TLS. El propósito de este comando es testear/verificar conexiones encriptadas y sólo provee una interfaz rudimentaria, aunque internamente utiliza casi toda la funcionalidad de la librería OpenSSL.
Para verificar el correcto funcionamiento de SSL/TLS en un host remoto, utilizar el comando s_client
especificando mínimamente el nombre del host y puerto:
openssl s_client -connect HOST:PUERTO
También es posible utilizar:
openssl s_client -host HOST -port PUERTO
Para mayor información acerca de s_client
, es posible consultar el manual de OpenSSL:
$ man s_client
Por ejemplo, para testear el correcto funcionamiento del protocolo HTTPS (HTTP sobre SSL/TLS) de un servidor de Google, indicar el nombre de host (www.google.com) y puerto (por defecto 443
) de la siguiente forma:
$ openssl s_client -connect www.google.com:443 CONNECTED(00000003) depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com i:/C=US/O=Google Inc/CN=Google Internet Authority G2 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2 i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority --- Server certificate -----BEGIN CERTIFICATE----- MIIe9TCCHd2gAwIBAgIIKKV21wFy60swDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl cm5ldCBBdXRob3JpdHkgRzIwHhcNMTQwNDIzMTEyMzQ1WhcNMTQwNzIyMDAwMDAw WjBkMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzETMBEGA1UEAwwKZ29v Z2xlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJHRkmbrncaO GVjauij3zvw6Wl9gBDZ+Ksmh5TksxKfwCv9rjnrFRHDZ1y/NurB4rD+PcdKUEUc9 bz+fNW5uLY2jOJ5EomL4xCy43p56BcaZabr7s/LyhKwvMZy4mgSbdtpOFFz2wfl6 fgkCo/KEigM2SVIMJtgJa++CPABIGa9ek+JdmAELFayFzEEOIEM/mrMDrlTISpHi b1tvDhOfsWvGHnd+hPU3kNO7G2sdhE+zTAiLalJnXOZ7A9HvgFt06Rqb3EymrvjU ewBvHyxgh3nlnEWZmMCDYSSpLpe6k3Ih/kodWjb9hchtIO38H17UK4oHuoUgvGRo WijFo6GtSDMCAwEAAaOCG8QwghvAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF BQcDAjCCGpoGA1UdEQSCGpEwghqNggpnb29nbGUuY29tggoqLjJtZG4ubmV0gg0q LmFuZHJvaWQuY29tghYqLmFwcGVuZ2luZS5nb29nbGUuY29tghQqLmF1LmRvdWJs ZWNsaWNrLm5ldIILKi5jYy1kdC5jb22CEiouY2xvdWQuZ29vZ2xlLmNvbYIUKi5k ZS5kb3VibGVjbGljay5uZXSCESouZG91YmxlY2xpY2suY29tghEqLmRvdWJsZWNs aWNrLm5ldIIVKi5mbHMuZG91YmxlY2xpY2submV0ghQqLmZyLmRvdWJsZWNsaWNr Lm5ldIIWKi5nb29nbGUtYW5hbHl0aWNzLmNvbYILKi5nb29nbGUuYWOCCyouZ29v Z2xlLmFkggsqLmdvb2dsZS5hZYILKi5nb29nbGUuYWaCCyouZ29vZ2xlLmFnggsq Lmdvb2dsZS5hbIILKi5nb29nbGUuYW2CCyouZ29vZ2xlLmFzggsqLmdvb2dsZS5h dIILKi5nb29nbGUuYXqCCyouZ29vZ2xlLmJhggsqLmdvb2dsZS5iZYILKi5nb29n bGUuYmaCCyouZ29vZ2xlLmJnggsqLmdvb2dsZS5iaYILKi5nb29nbGUuYmqCCyou Z29vZ2xlLmJzggsqLmdvb2dsZS5idIILKi5nb29nbGUuYnmCCyouZ29vZ2xlLmNh ggwqLmdvb2dsZS5jYXSCCyouZ29vZ2xlLmNjggsqLmdvb2dsZS5jZIILKi5nb29n bGUuY2aCCyouZ29vZ2xlLmNnggsqLmdvb2dsZS5jaIILKi5nb29nbGUuY2mCCyou Z29vZ2xlLmNsggsqLmdvb2dsZS5jbYILKi5nb29nbGUuY26CDiouZ29vZ2xlLmNv LmFvgg4qLmdvb2dsZS5jby5id4IOKi5nb29nbGUuY28uY2uCDiouZ29vZ2xlLmNv LmNygg4qLmdvb2dsZS5jby5odYIOKi5nb29nbGUuY28uaWSCDiouZ29vZ2xlLmNv Lmlsgg4qLmdvb2dsZS5jby5pbYIOKi5nb29nbGUuY28uaW6CDiouZ29vZ2xlLmNv Lmplgg4qLmdvb2dsZS5jby5qcIIOKi5nb29nbGUuY28ua2WCDiouZ29vZ2xlLmNv Lmtygg4qLmdvb2dsZS5jby5sc4IOKi5nb29nbGUuY28ubWGCDiouZ29vZ2xlLmNv Lm16gg4qLmdvb2dsZS5jby5ueoIOKi5nb29nbGUuY28udGiCDiouZ29vZ2xlLmNv LnR6gg4qLmdvb2dsZS5jby51Z4IOKi5nb29nbGUuY28udWuCDiouZ29vZ2xlLmNv LnV6gg4qLmdvb2dsZS5jby52ZYIOKi5nb29nbGUuY28udmmCDiouZ29vZ2xlLmNv Lnphgg4qLmdvb2dsZS5jby56bYIOKi5nb29nbGUuY28ueneCDCouZ29vZ2xlLmNv bYIPKi5nb29nbGUuY29tLmFmgg8qLmdvb2dsZS5jb20uYWeCDyouZ29vZ2xlLmNv bS5haYIPKi5nb29nbGUuY29tLmFygg8qLmdvb2dsZS5jb20uYXWCDyouZ29vZ2xl LmNvbS5iZIIPKi5nb29nbGUuY29tLmJogg8qLmdvb2dsZS5jb20uYm6CDyouZ29v Z2xlLmNvbS5ib4IPKi5nb29nbGUuY29tLmJygg8qLmdvb2dsZS5jb20uYnmCDyou Z29vZ2xlLmNvbS5ieoIPKi5nb29nbGUuY29tLmNugg8qLmdvb2dsZS5jb20uY2+C DyouZ29vZ2xlLmNvbS5jdYIPKi5nb29nbGUuY29tLmN5gg8qLmdvb2dsZS5jb20u ZG+CDyouZ29vZ2xlLmNvbS5lY4IPKi5nb29nbGUuY29tLmVngg8qLmdvb2dsZS5j b20uZXSCDyouZ29vZ2xlLmNvbS5maoIPKi5nb29nbGUuY29tLmdlgg8qLmdvb2ds ZS5jb20uZ2iCDyouZ29vZ2xlLmNvbS5naYIPKi5nb29nbGUuY29tLmdygg8qLmdv b2dsZS5jb20uZ3SCDyouZ29vZ2xlLmNvbS5oa4IPKi5nb29nbGUuY29tLmlxgg8q Lmdvb2dsZS5jb20uam2CDyouZ29vZ2xlLmNvbS5qb4IPKi5nb29nbGUuY29tLmto gg8qLmdvb2dsZS5jb20ua3eCDyouZ29vZ2xlLmNvbS5sYoIPKi5nb29nbGUuY29t Lmx5gg8qLmdvb2dsZS5jb20ubW2CDyouZ29vZ2xlLmNvbS5tdIIPKi5nb29nbGUu Y29tLm14gg8qLmdvb2dsZS5jb20ubXmCDyouZ29vZ2xlLmNvbS5uYYIPKi5nb29n bGUuY29tLm5mgg8qLmdvb2dsZS5jb20ubmeCDyouZ29vZ2xlLmNvbS5uaYIPKi5n b29nbGUuY29tLm5wgg8qLmdvb2dsZS5jb20ubnKCDyouZ29vZ2xlLmNvbS5vbYIP Ki5nb29nbGUuY29tLnBhgg8qLmdvb2dsZS5jb20ucGWCDyouZ29vZ2xlLmNvbS5w Z4IPKi5nb29nbGUuY29tLnBogg8qLmdvb2dsZS5jb20ucGuCDyouZ29vZ2xlLmNv bS5wbIIPKi5nb29nbGUuY29tLnBygg8qLmdvb2dsZS5jb20ucHmCDyouZ29vZ2xl LmNvbS5xYYIPKi5nb29nbGUuY29tLnJ1gg8qLmdvb2dsZS5jb20uc2GCDyouZ29v Z2xlLmNvbS5zYoIPKi5nb29nbGUuY29tLnNngg8qLmdvb2dsZS5jb20uc2yCDyou Z29vZ2xlLmNvbS5zdoIPKi5nb29nbGUuY29tLnRqgg8qLmdvb2dsZS5jb20udG6C DyouZ29vZ2xlLmNvbS50coIPKi5nb29nbGUuY29tLnR3gg8qLmdvb2dsZS5jb20u dWGCDyouZ29vZ2xlLmNvbS51eYIPKi5nb29nbGUuY29tLnZjgg8qLmdvb2dsZS5j b20udmWCDyouZ29vZ2xlLmNvbS52boILKi5nb29nbGUuY3aCCyouZ29vZ2xlLmN6 ggsqLmdvb2dsZS5kZYILKi5nb29nbGUuZGqCCyouZ29vZ2xlLmRrggsqLmdvb2ds ZS5kbYILKi5nb29nbGUuZHqCCyouZ29vZ2xlLmVlggsqLmdvb2dsZS5lc4ILKi5n b29nbGUuZmmCCyouZ29vZ2xlLmZtggsqLmdvb2dsZS5mcoILKi5nb29nbGUuZ2GC CyouZ29vZ2xlLmdlggsqLmdvb2dsZS5nZ4ILKi5nb29nbGUuZ2yCCyouZ29vZ2xl LmdtggsqLmdvb2dsZS5ncIILKi5nb29nbGUuZ3KCCyouZ29vZ2xlLmd5ggsqLmdv b2dsZS5oa4ILKi5nb29nbGUuaG6CCyouZ29vZ2xlLmhyggsqLmdvb2dsZS5odIIL Ki5nb29nbGUuaHWCCyouZ29vZ2xlLmllggsqLmdvb2dsZS5pbYINKi5nb29nbGUu aW5mb4ILKi5nb29nbGUuaXGCCyouZ29vZ2xlLmlyggsqLmdvb2dsZS5pc4ILKi5n b29nbGUuaXSCDiouZ29vZ2xlLml0LmFvggsqLmdvb2dsZS5qZYILKi5nb29nbGUu am+CDSouZ29vZ2xlLmpvYnOCCyouZ29vZ2xlLmpwggsqLmdvb2dsZS5rZ4ILKi5n b29nbGUua2mCCyouZ29vZ2xlLmt6ggsqLmdvb2dsZS5sYYILKi5nb29nbGUubGmC CyouZ29vZ2xlLmxrggsqLmdvb2dsZS5sdIILKi5nb29nbGUubHWCCyouZ29vZ2xl Lmx2ggsqLmdvb2dsZS5tZIILKi5nb29nbGUubWWCCyouZ29vZ2xlLm1nggsqLmdv b2dsZS5ta4ILKi5nb29nbGUubWyCCyouZ29vZ2xlLm1uggsqLmdvb2dsZS5tc4IL Ki5nb29nbGUubXWCCyouZ29vZ2xlLm12ggsqLmdvb2dsZS5td4ILKi5nb29nbGUu bmWCDiouZ29vZ2xlLm5lLmpwggwqLmdvb2dsZS5uZXSCCyouZ29vZ2xlLm5nggsq Lmdvb2dsZS5ubIILKi5nb29nbGUubm+CCyouZ29vZ2xlLm5yggsqLmdvb2dsZS5u dYIPKi5nb29nbGUub2ZmLmFpggsqLmdvb2dsZS5wa4ILKi5nb29nbGUucGyCCyou Z29vZ2xlLnBuggsqLmdvb2dsZS5wc4ILKi5nb29nbGUucHSCCyouZ29vZ2xlLnJv ggsqLmdvb2dsZS5yc4ILKi5nb29nbGUucnWCCyouZ29vZ2xlLnJ3ggsqLmdvb2ds ZS5zY4ILKi5nb29nbGUuc2WCCyouZ29vZ2xlLnNoggsqLmdvb2dsZS5zaYILKi5n b29nbGUuc2uCCyouZ29vZ2xlLnNtggsqLmdvb2dsZS5zboILKi5nb29nbGUuc2+C CyouZ29vZ2xlLnNyggsqLmdvb2dsZS5zdIILKi5nb29nbGUudGSCCyouZ29vZ2xl LnRnggsqLmdvb2dsZS50a4ILKi5nb29nbGUudGyCCyouZ29vZ2xlLnRtggsqLmdv b2dsZS50boILKi5nb29nbGUudG+CCyouZ29vZ2xlLnR0ggsqLmdvb2dsZS51c4IL Ki5nb29nbGUudXqCCyouZ29vZ2xlLnZnggsqLmdvb2dsZS52dYILKi5nb29nbGUu d3OCDyouZ29vZ2xlYXBpcy5jboIUKi5nb29nbGVjb21tZXJjZS5jb22CESouZ29v Z2xldmlkZW8uY29tgg0qLmdzdGF0aWMuY29tggoqLmd2dDEuY29tghQqLmpwLmRv dWJsZWNsaWNrLm5ldIIUKi5tZXRyaWMuZ3N0YXRpYy5jb22CFCoudWsuZG91Ymxl Y2xpY2submV0ggwqLnVyY2hpbi5jb22CECoudXJsLmdvb2dsZS5jb22CFioueW91 dHViZS1ub2Nvb2tpZS5jb22CDSoueW91dHViZS5jb22CFioueW91dHViZWVkdWNh dGlvbi5jb22CCyoueXRpbWcuY29tghVhZC5tby5kb3VibGVjbGljay5uZXSCC2Fu ZHJvaWQuY29tgg9kb3VibGVjbGljay5uZXSCBGcuY2+CBmdvby5nbIIUZ29vZ2xl LWFuYWx5dGljcy5jb22CCWdvb2dsZS5hY4IJZ29vZ2xlLmFkgglnb29nbGUuYWWC CWdvb2dsZS5hZoIJZ29vZ2xlLmFngglnb29nbGUuYWyCCWdvb2dsZS5hbYIJZ29v Z2xlLmFzgglnb29nbGUuYXSCCWdvb2dsZS5heoIJZ29vZ2xlLmJhgglnb29nbGUu YmWCCWdvb2dsZS5iZoIJZ29vZ2xlLmJngglnb29nbGUuYmmCCWdvb2dsZS5iaoIJ Z29vZ2xlLmJzgglnb29nbGUuYnSCCWdvb2dsZS5ieYIJZ29vZ2xlLmNhggpnb29n bGUuY2F0gglnb29nbGUuY2OCCWdvb2dsZS5jZIIJZ29vZ2xlLmNmgglnb29nbGUu Y2eCCWdvb2dsZS5jaIIJZ29vZ2xlLmNpgglnb29nbGUuY2yCCWdvb2dsZS5jbYIJ Z29vZ2xlLmNuggxnb29nbGUuY28uYW+CDGdvb2dsZS5jby5id4IMZ29vZ2xlLmNv LmNrggxnb29nbGUuY28uY3KCDGdvb2dsZS5jby5odYIMZ29vZ2xlLmNvLmlkggxn b29nbGUuY28uaWyCDGdvb2dsZS5jby5pbYIMZ29vZ2xlLmNvLmluggxnb29nbGUu Y28uamWCDGdvb2dsZS5jby5qcIIMZ29vZ2xlLmNvLmtlggxnb29nbGUuY28ua3KC DGdvb2dsZS5jby5sc4IMZ29vZ2xlLmNvLm1hggxnb29nbGUuY28ubXqCDGdvb2ds ZS5jby5ueoIMZ29vZ2xlLmNvLnRoggxnb29nbGUuY28udHqCDGdvb2dsZS5jby51 Z4IMZ29vZ2xlLmNvLnVrggxnb29nbGUuY28udXqCDGdvb2dsZS5jby52ZYIMZ29v Z2xlLmNvLnZpggxnb29nbGUuY28uemGCDGdvb2dsZS5jby56bYIMZ29vZ2xlLmNv Lnp3gg1nb29nbGUuY29tLmFmgg1nb29nbGUuY29tLmFngg1nb29nbGUuY29tLmFp gg1nb29nbGUuY29tLmFygg1nb29nbGUuY29tLmF1gg1nb29nbGUuY29tLmJkgg1n b29nbGUuY29tLmJogg1nb29nbGUuY29tLmJugg1nb29nbGUuY29tLmJvgg1nb29n bGUuY29tLmJygg1nb29nbGUuY29tLmJ5gg1nb29nbGUuY29tLmJ6gg1nb29nbGUu Y29tLmNugg1nb29nbGUuY29tLmNvgg1nb29nbGUuY29tLmN1gg1nb29nbGUuY29t LmN5gg1nb29nbGUuY29tLmRvgg1nb29nbGUuY29tLmVjgg1nb29nbGUuY29tLmVn gg1nb29nbGUuY29tLmV0gg1nb29nbGUuY29tLmZqgg1nb29nbGUuY29tLmdlgg1n b29nbGUuY29tLmdogg1nb29nbGUuY29tLmdpgg1nb29nbGUuY29tLmdygg1nb29n bGUuY29tLmd0gg1nb29nbGUuY29tLmhrgg1nb29nbGUuY29tLmlxgg1nb29nbGUu Y29tLmptgg1nb29nbGUuY29tLmpvgg1nb29nbGUuY29tLmtogg1nb29nbGUuY29t Lmt3gg1nb29nbGUuY29tLmxigg1nb29nbGUuY29tLmx5gg1nb29nbGUuY29tLm1t gg1nb29nbGUuY29tLm10gg1nb29nbGUuY29tLm14gg1nb29nbGUuY29tLm15gg1n b29nbGUuY29tLm5hgg1nb29nbGUuY29tLm5mgg1nb29nbGUuY29tLm5ngg1nb29n bGUuY29tLm5pgg1nb29nbGUuY29tLm5wgg1nb29nbGUuY29tLm5ygg1nb29nbGUu Y29tLm9tgg1nb29nbGUuY29tLnBhgg1nb29nbGUuY29tLnBlgg1nb29nbGUuY29t LnBngg1nb29nbGUuY29tLnBogg1nb29nbGUuY29tLnBrgg1nb29nbGUuY29tLnBs gg1nb29nbGUuY29tLnBygg1nb29nbGUuY29tLnB5gg1nb29nbGUuY29tLnFhgg1n b29nbGUuY29tLnJ1gg1nb29nbGUuY29tLnNhgg1nb29nbGUuY29tLnNigg1nb29n bGUuY29tLnNngg1nb29nbGUuY29tLnNsgg1nb29nbGUuY29tLnN2gg1nb29nbGUu Y29tLnRqgg1nb29nbGUuY29tLnRugg1nb29nbGUuY29tLnRygg1nb29nbGUuY29t LnR3gg1nb29nbGUuY29tLnVhgg1nb29nbGUuY29tLnV5gg1nb29nbGUuY29tLnZj gg1nb29nbGUuY29tLnZlgg1nb29nbGUuY29tLnZugglnb29nbGUuY3aCCWdvb2ds ZS5jeoIJZ29vZ2xlLmRlgglnb29nbGUuZGqCCWdvb2dsZS5ka4IJZ29vZ2xlLmRt gglnb29nbGUuZHqCCWdvb2dsZS5lZYIJZ29vZ2xlLmVzgglnb29nbGUuZmmCCWdv b2dsZS5mbYIJZ29vZ2xlLmZygglnb29nbGUuZ2GCCWdvb2dsZS5nZYIJZ29vZ2xl Lmdngglnb29nbGUuZ2yCCWdvb2dsZS5nbYIJZ29vZ2xlLmdwgglnb29nbGUuZ3KC CWdvb2dsZS5neYIJZ29vZ2xlLmhrgglnb29nbGUuaG6CCWdvb2dsZS5ocoIJZ29v Z2xlLmh0gglnb29nbGUuaHWCCWdvb2dsZS5pZYIJZ29vZ2xlLmltggtnb29nbGUu aW5mb4IJZ29vZ2xlLmlxgglnb29nbGUuaXKCCWdvb2dsZS5pc4IJZ29vZ2xlLml0 ggxnb29nbGUuaXQuYW+CCWdvb2dsZS5qZYIJZ29vZ2xlLmpvggtnb29nbGUuam9i c4IJZ29vZ2xlLmpwgglnb29nbGUua2eCCWdvb2dsZS5raYIJZ29vZ2xlLmt6ggln b29nbGUubGGCCWdvb2dsZS5saYIJZ29vZ2xlLmxrgglnb29nbGUubHSCCWdvb2ds ZS5sdYIJZ29vZ2xlLmx2gglnb29nbGUubWSCCWdvb2dsZS5tZYIJZ29vZ2xlLm1n gglnb29nbGUubWuCCWdvb2dsZS5tbIIJZ29vZ2xlLm1ugglnb29nbGUubXOCCWdv b2dsZS5tdYIJZ29vZ2xlLm12gglnb29nbGUubXeCCWdvb2dsZS5uZYIMZ29vZ2xl Lm5lLmpwggpnb29nbGUubmV0gglnb29nbGUubmeCCWdvb2dsZS5ubIIJZ29vZ2xl Lm5vgglnb29nbGUubnKCCWdvb2dsZS5udYINZ29vZ2xlLm9mZi5haYIJZ29vZ2xl LnBrgglnb29nbGUucGyCCWdvb2dsZS5wboIJZ29vZ2xlLnBzgglnb29nbGUucHSC CWdvb2dsZS5yb4IJZ29vZ2xlLnJzgglnb29nbGUucnWCCWdvb2dsZS5yd4IJZ29v Z2xlLnNjgglnb29nbGUuc2WCCWdvb2dsZS5zaIIJZ29vZ2xlLnNpgglnb29nbGUu c2uCCWdvb2dsZS5zbYIJZ29vZ2xlLnNugglnb29nbGUuc2+CCWdvb2dsZS5zcoIJ Z29vZ2xlLnN0gglnb29nbGUudGSCCWdvb2dsZS50Z4IJZ29vZ2xlLnRrgglnb29n bGUudGyCCWdvb2dsZS50bYIJZ29vZ2xlLnRugglnb29nbGUudG+CCWdvb2dsZS50 dIIJZ29vZ2xlLnVzgglnb29nbGUudXqCCWdvb2dsZS52Z4IJZ29vZ2xlLnZ1ggln b29nbGUud3OCEmdvb2dsZWNvbW1lcmNlLmNvbYILZ3N0YXRpYy5jb22CCnVyY2hp bi5jb22CCHlvdXR1LmJlggt5b3V0dWJlLmNvbYIUeW91dHViZWVkdWNhdGlvbi5j b20waAYIKwYBBQUHAQEEXDBaMCsGCCsGAQUFBzAChh9odHRwOi8vcGtpLmdvb2ds ZS5jb20vR0lBRzIuY3J0MCsGCCsGAQUFBzABhh9odHRwOi8vY2xpZW50czEuZ29v Z2xlLmNvbS9vY3NwMB0GA1UdDgQWBBQQneP04QRPMNGhC5WVzRUQ2K7F6DAMBgNV HRMBAf8EAjAAMB8GA1UdIwQYMBaAFErdBhYbvPZotXb1gba7Yhq6WoEvMBcGA1Ud IAQQMA4wDAYKKwYBBAHWeQIFATAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vcGtp Lmdvb2dsZS5jb20vR0lBRzIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQBTeGuKdNij 6qW0pSlGFgp5TVUVWTZ9FdvCnhkpVy+bTdv6Bqjlsl7yVWVOgML6F439+lXBjMMO jhweAkNIYGt1eIyoy1OR8l+9xfPDPutDdrDKPaa8XvUaAp6JGxKbP05NKZnvDOlW khiij3sq9K4rHZyZIG8S4da0MCPtSjZVy5caeDrSsP7BlpzCfDh2rVooSVdgWeW4 YWYQbwSyZRDbRxXr9lZ7BvpO2AomhkgoZlE84BeEGEsCdibiBbmhHpDgyQnSezMQ AeSRCIj0zMd/TJb3B/qSmKOM6nDCNsisEpALBU3XDcTTtw3DEGjcO73zVZPltR0U Zy+v6b8PMm1Y -----END CERTIFICATE----- subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2 --- No client certificate CA names sent --- SSL handshake has read 10522 bytes and written 443 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-GCM-SHA256 Session-ID: 4860CF22D62CDFE29C9AD0E61E474E8358EA591E55648A7B492AACA1B542088C Session-ID-ctx: Master-Key: 52CAAA42FDBA395C4E783E244B590CBAD9FA48F07369D1B42BB88F80BA2840D03A4955C4F3373A9495F0F8429866930C Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 100800 (seconds) TLS session ticket: 0000 - 61 f8 af b1 42 a7 af e6-89 35 e0 ab 2c cd 81 5f a...B....5..,.._ 0010 - 70 14 8b 21 14 27 1f 90-75 50 38 62 39 d1 cb b3 p..!.'..uP8b9... 0020 - bb 65 12 e0 55 04 0a c9-f4 34 7c d6 e6 05 d9 7f .e..U....4|..... 0030 - 0e 11 de 47 ab f6 6d 1a-0a 1d 8e b5 d8 9c bf 38 ...G..m........8 0040 - 3c 92 1c 31 2c 37 e8 9c-da e6 21 e8 dd d7 d8 7d <..1,7....!....} 0050 - 49 a1 92 59 39 78 a9 9d-a6 55 51 99 fe b0 6a 53 I..Y9x...UQ...jS 0060 - fc fb e4 f8 2d b2 f9 41-c5 a3 b2 03 a3 98 d8 54 ....-..A.......T 0070 - f3 fd 2e f7 a8 ed d5 82-a5 56 b7 14 7a 4c a1 a1 .........V..zL.. 0080 - bb 9d 80 3e e5 26 b3 e4-f4 bb 16 da 27 a2 f0 ae ...>.&......'... 0090 - fc a1 6d 70 77 62 4a 13-23 6f f9 d6 ef d0 58 57 ..mpwbJ.#o....XW 00a0 - 79 2e ac 5c y..\ Start Time: 1399321621 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate) ---
Al finalizar la conexión SSL/TLS, la comunicación queda abierta al protocolo subyacente (en este caso HTTP), por lo que es posible interactuar con el mismo (si es que conocemos su funcionamiento), luego de los tres guiones "---". Por ejemplo, voy a pedir (GET
) la página "www.google.com/hola", la cual no existe, por lo que el servidor retornará error 404:
GET /hola HTTP/1.0 HTTP/1.0 404 Not Found Content-Type: text/html; charset=UTF-8 Content-Length: 1429 Date: Mon, 05 May 2014 20:08:36 GMT Server: GFE/2.0 <!DOCTYPE html> <html lang=en> <meta charset=utf-8> <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> <title>Error 404 (Not Found)!!1</title> <style> *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/errors/logo_sm_2.png) no-repeat}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/errors/logo_sm_2_hr.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:55px;width:150px} </style> <a href=//www.google.com/><span id=logo aria-label=Google></span></a> <p><b>404.</b> <ins>That’s an error.</ins> <p>The requested URL <code>/hola</code> was not found on this server. <ins>That’s all we know.</ins> read:errno=0
Más allá de esta prueba de HTTP, lo importante es ver cómo procede la conexión SSL/TLS. Este cliente se puede utilizar para comprobar que la cadena de certificación del certificado del servidor funcione correctamente, para comprobar el funcionamiento de certificados cliente, para verificar la validez de un certificado en un host remoto y para obtener información detallada de un certificado en un host remoto.
En el ejemplo anterior se puede notar la cadena de certificación para el CN (common name) "www.google.com":
Certificate chain 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com i:/C=US/O=Google Inc/CN=Google Internet Authority G2 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2 i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
El certificado para "google.com" está firmado por la entidad certificante intermedia "Google Internet Authority G2", que a su vez está firmada por la autoridad certificate (root CA) "GeoTrust Global CA".
Se observa que la verificación falla porque no se encuentra el certificado de la entidad certificante raíz "GeoTrust Global CA":
Verify return code: 20 (unable to get local issuer certificate)
Esto se debe a que OpenSSL no incluye al certificado de "GeoTrust Global CA" entre los certificados de las autoridades certificantes raíz (entidades certificantes de confianza). Por supuesto este error no se observa en la mayoría de los navegadores, ya que éstos incluyen los certificados de las autoridades certificantes raíz más importantes.
En la página del manual "verify" es posible consultar el detalle de los códigos de retorno de SSL:
$ man verify
Otros códigos de error comunes pueden ser 21 y 19.
Verify return code: 21 (unable to verify the first certificate)
El código de error 21 significa que el certificado no está firmado por ninguna autoridad certificante.
Verify return code: 19 (self signed certificate in certificate chain)
El código de error 19 significa que el certificado (o algún certificado de la cadena) es autofirmado.
Gracias a s_client
uno puede contar con una buena herramienta para debuggear errores SSL/TLS.