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.


Tal vez pueda interesarte


Compartí este artículo