Não é possível completar o handshake SSL com um servidor da imagem do GCE Ubuntu 16.04.1 (mas funciona em qualquer outro lugar)

2

Estou tentando conectar-me ao swift.ca-ns-1.clouda.ca:8443 via SSL. Eu posso conectar a este servidor a partir de várias outras máquinas, incluindo outras novas caixas 16.04.1 (não no GCE), e eu me conecto a ele de outras instâncias do GCE que não são Ubuntu 16.04.1, mas quando tento conectar de qualquer Ubuntu 16.04. 1 instância do GCE falha no handshake SSL. Eu postei um exemplo de saída do openssl abaixo. Note que eu posso conectar a todos os outros servidores SSL que eu tentei. A própria CloudA não conseguiu descobrir. Alguma idéia?

% openssl s_client -connect swift.ca-ns-1.clouda.ca:8443
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1475846555
Timeout : 300 (sec)
Verify return code: 0 (ok)
---

UPDATE : Confirmei que isso só acontece nas zonas us-central1 (qualquer sub-registro também é afetado). Criar uma instância em us-east1 funciona perfeitamente bem.

    
por Brandon Aubie 07.10.2016 / 19:41

1 resposta

6

write:errno=104
...
SSL handshake has read 0 bytes and written 305 bytes

Isso significa que

  • a conexão TCP com o servidor foi bem-sucedida
  • openssl s_client tentou iniciar o handshake TLS enviando o ClientHello
  • o servidor ou alguma middlebox (firewall, balanceador de carga ...) causou um RST (errno 104 é ECONNRESET ) da conexão TCP (provavelmente) como resposta ao ClientHello

É impossível dizer a partir dessas informações o que causou o RST e qual sistema o enviou. Mas pode-se tentar reduzi-lo com algumas experiências:

  • Verifique se todos os 16.04.1 (trabalhando e não trabalhando) usam a mesma versão openssl. Chamar openssl version não é suficiente, já que o backport de distribuição muda para versões mais antigas e o número da versão não é alterado. Use em vez de openssl version -a e compare o tempo de compilação. Se não forem iguais, verifique se estão e teste novamente.
  • Verifique se você usa o mesmo endereço IP para o destino em todos os sistemas, ou seja, tente usar s_client com um IP de destino bom e conhecido.
  • Verifique se o servidor tem problemas com o endereço IP de origem encapsulando a conexão (por exemplo, com o OpenSSH) para que ele se origine de um sistema válido conhecido. Se você não tiver sorte, o endereço IP do seu sistema está em alguma lista negra devido às atividades do proprietário anterior.
por 07.10.2016 / 20:34