Se você tiver o OpenSSL à sua disposição, verificar isso é extremamente fácil:
cat /dev/null | openssl s_client -showcerts -servername example.com -connect example.com:443
Vou explicar os componentes:
-
cat /dev/null
:openssl s_client
funciona muito comotelnet
. Ele estabelece a conexão e você pode interagir com ela. Quandoopenssl
encontra EOF no fluxo de entrada, a conexão é fechada.cat /dev/null
resulta imediatamente em EOF. Alternativamente, você pode usar Ctrl D para emitir EOF no terminal. -
openssl s_client
: “Programa cliente SSL / TLS” -
-showcerts
: mostra os blobs de certificado no formato PEM. Apenas mostra o certificado do servidor de outra forma. -
-servername example.com
: Defina o nome do servidor para SNI . Obrigatório ao fazer vhosts baseados em nome HTTPS. -
-connect example.com:443
: Conecte-se aexample.com
na porta443
, a porta HTTPS padrão.
Isso resulta em algo assim:
$ cat /dev/null | openssl s_client -showcerts -servername inbox.google.com -connect inbox.google.com:443
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = mail.google.com
verify return:1
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=mail.google.com
i:/C=US/O=Google Inc/CN=Google Internet Authority G2
-----BEGIN CERTIFICATE-----
snip
-----END CERTIFICATE-----
1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
-----BEGIN CERTIFICATE-----
snip
-----END CERTIFICATE-----
2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
snip
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=mail.google.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2
---
No client certificate CA names sent
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3767 bytes and written 469 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
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 1B47CE2ADB10CE410C8048C3AAEF7CEF1B2B76C6D2DF5EDE78FE015A6DA44207
Session-ID-ctx:
Master-Key: E9AE458F6D72D507F422DA2340C7345AC6EDB087278E62A5FDA754897EC6BDF5C336AFBF6B88554E358C675A3545B724
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 100800 (seconds)
TLS session ticket:
snip
Start Time: 1460049698
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
DONE
Eu usei um domínio do Google aqui porque ele tem uma cadeia de certificados mais profunda do que example.com
. O certificado aqui tem "Nomes Alternativos de Assunto" e, como tal, também é válido para inbox.google.com
.
Um servidor configurado incorretamente ignoraria o certificado intermediário, chamado "Google Internet Authority G2" aqui. O certificado Equifax é redundante porque a GeoTrust é uma autoridade de certificação estabelecida e confiável no seu navegador.