Estou tentando obter o certificado SSL / TLS para um de nossos balanceadores de carga (Netscaler) usando:
openssl s_client -showcerts -connect lb.example.com:443
Mas não vai me mostrar o certificado:
CONNECTED(00000003)
write:errno=54
Usar -servername lb.example.com
não ajuda, e nosso administrador de sistemas me disse que nossos balanceadores de carga não usam SNI de qualquer maneira.
Edit : O servidor está na nossa intranet e não aceita conexões da Internet pública. Esta é a saída do openssl com -debug
:
CONNECTED(00000003)
write to 0x7fec7af0abf0 [0x7fec7b803a00] (130 bytes => 130 (0x82))
0000 - 80 80 01 03 01 00 57 00-00 00 20 00 00 39 00 00 ......W... ..9..
0010 - 38 00 00 35 00 00 16 00-00 13 00 00 0a 07 00 c0 8..5............
0020 - 00 00 33 00 00 32 00 00-2f 00 00 9a 00 00 99 00 ..3..2../.......
0030 - 00 96 03 00 80 00 00 05-00 00 04 01 00 80 00 00 ................
0040 - 15 00 00 12 00 00 09 06-00 40 00 00 14 00 00 11 .........@......
0050 - 00 00 08 00 00 06 04 00-80 00 00 03 02 00 80 00 ................
0060 - 00 ff a6 f7 27 1a a7 18-85 cf b2 03 22 fc 48 3d ....'.......".H=
0070 - dd a9 2c b7 76 67 62 80-df 85 ed 48 35 c7 d4 87 ..,.vgb....H5...
0080 - 8d d3 ..
read from 0x7fec7af0abf0 [0x7fec7b809000] (7 bytes => -1 (0xFFFFFFFFFFFFFFFF))
write:errno=54
E esta é a saída relevante de curl -v https://lb.example.com/
:
$ curl -vI https://lb.exmple.com/
* Trying 1.2.3.4...
* Connected to lb.exmple.com (10.1.2.3) port 443 (#0)
* TLS 1.2 connection using TLS_RSA_WITH_AES_256_CBC_SHA
* Server certificate: lb.example.com
* Server certificate: RapidSSL SHA256 CA - G2
* Server certificate: GeoTrust Primary Certification Authority - G3
> HEAD / HTTP/1.1
> Host: lb.exmple.com
> User-Agent: curl/7.43.0
> Accept: */*
>
Alguma sugestão de como posso obter o certificado usando openssl s_client
?
ssl
certificate
https
openssl
Daniel Serodio
fonte
fonte
-debug
) à sua pergunta.Respostas:
Depois de um tempo, eu descobri: esse balanceador de carga específico foi configurado para usar apenas TLSv1.2, que a versão do openssl incluída no OS X (0.9.8) não entende. Eu instalei uma versão mais recente do openssl (> = 1.0.1) usando homebrew, então isso funciona:
fonte
Se for uma configuração moderna (algumas renúncias ao que isso significa), use:
Parece que há um preâmbulo extra nos bytes 0 e 1. No byte 2, deve haver um tipo de registro. Nos bytes 3 e 4, deve haver um número de versão. Os bytes 5 e 6 devem ter um comprimento de 16 bits da carga útil.
Aqui está um exemplo de trabalho:
Acima, o tipo de registro está na posição 0 e seu valor é 0x16. 0x16 é o tipo de aperto de mão. A versão da camada de registro são os próximos dois bytes nas posições 2 e 3. Seus valores são
0x03 0x01
. O comprimento da carga útil é0x007f
.Consulte também o RFC 5246, Protocolo TLS (Transport Layer Security) versão 1.2 , página 18:
Seu problema pode ser o antigo tipo de registro compatível com SSLv2. Ou pode ser uma versão de baixo nível do OpenSSL de, digamos 0.9.5 ou 0.9.8. É difícil dizer, e provavelmente precisamos de mais informações.
Mais informações incluem SO; Versão OpenSSL; se você tentou substituir a versão do OpenSSL da plataforma por sua própria versão do OpenSSL; se houver uma caixa de firewall ou "inspeção da web" ou outra vantagem do middleware em execução; e o que o servidor recebe.
Isso soa meio incomum. Mas é uma extensão do TLS, por isso é ignorado se não for usado (e não produzirá um alerta fatal).
A regra de ouro em 2016: sempre use TLS 1.0 ou superior e sempre use SNI.
fonte