Não é possível acessar um servidor com um certificado SSL autoassinado de alguns dispositivos

1

Estou com dificuldades para me conectar a um site SSL (certificado auto-assinado) que parece funcionar em outros computadores / conexões de internet. Eu tentei acessar o site usando o wget:

wget https://example.com --no-check-certificate
--2018-02-06 17:07:50--  https://example.com
Resolving example.com... xx.xx.xx.xx
Connecting to example.com|xx.xx.xx.xx|:443... connected.
Unable to establish SSL connection.

Em seguida, usei o Python3 e o módulo de solicitações em outra tentativa:

>>> r = requests.get("https://example.com", verify=False)
Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/urllib3/connectionpool.py", line 601, in urlopen
    chunked=chunked)
  File "/usr/lib/python3.5/site-packages/urllib3/connectionpool.py", line 346, in _make_request
    self._validate_conn(conn)
  File "/usr/lib/python3.5/site-packages/urllib3/connectionpool.py", line 850, in _validate_conn
    conn.connect()
  File "/usr/lib/python3.5/site-packages/urllib3/connection.py", line 326, in connect
    ssl_context=context)
  File "/usr/lib/python3.5/site-packages/urllib3/util/ssl_.py", line 329, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/home/linux-dev/target/usr/lib/python3.5/ssl.py", line 377, in wrap_socket
  File "/home/linux-dev/target/usr/lib/python3.5/ssl.py", line 752, in __init__
  File "/home/linux-dev/target/usr/lib/python3.5/ssl.py", line 988, in do_handshake
  File "/home/linux-dev/target/usr/lib/python3.5/ssl.py", line 633, in do_handshake
ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/requests/adapters.py", line 440, in send
    timeout=timeout
  File "/usr/lib/python3.5/site-packages/urllib3/connectionpool.py", line 639, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/lib/python3.5/site-packages/urllib3/util/retry.py", line 357, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3.5/site-packages/urllib3/packages/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3.5/site-packages/urllib3/connectionpool.py", line 601, in urlopen
    chunked=chunked)
  File "/usr/lib/python3.5/site-packages/urllib3/connectionpool.py", line 346, in _make_request
    self._validate_conn(conn)
  File "/usr/lib/python3.5/site-packages/urllib3/connectionpool.py", line 850, in _validate_conn
    conn.connect()
  File "/usr/lib/python3.5/site-packages/urllib3/connection.py", line 326, in connect
    ssl_context=context)
  File "/usr/lib/python3.5/site-packages/urllib3/util/ssl_.py", line 329, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/home/linux-dev/target/usr/lib/python3.5/ssl.py", line 377, in wrap_socket
  File "/home/linux-dev/target/usr/lib/python3.5/ssl.py", line 752, in __init__
  File "/home/linux-dev/target/usr/lib/python3.5/ssl.py", line 988, in do_handshake
  File "/home/linux-dev/target/usr/lib/python3.5/ssl.py", line 633, in do_handshake
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/site-packages/requests/api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/lib/python3.5/site-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3.5/site-packages/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3.5/site-packages/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3.5/site-packages/requests/adapters.py", line 490, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
>>>

Eu tentei usar o openssl para ver informações mais detalhadas:

# openssl s_client -connect example.com:443 -servername example.com
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 330 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: 1517926190
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

A execução do mesmo comando openssl a partir de um computador diferente (com uma conexão de internet diferente) resulta na seguinte saída:

# openssl s_client -connect example.com:443 -servername example.com
CONNECTED(00000003)
depth=0 CN = example.com
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = example.com
verify return:1
---
Certificate chain
 0 s:/CN=example.com
   i:/CN=example.com
---
Server certificate
-----BEGIN CERTIFICATE-----
.
.
.
-----END CERTIFICATE-----
subject=/CN=example.com
issuer=/CN=example.com
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 706 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-ECDSA-AES256-GCM-SHA384
Server public key is 256 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-ECDSA-AES256-GCM-SHA384
    Session-ID: xxxxxx
    Session-ID-ctx:
    Master-Key: xxxxxx
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1517926278
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
closed

O que poderia estar causando a falha na conexão?

    
por Amr Bekhit 06.02.2018 / 15:18

2 respostas

0

O problema é que o ISP estava bloqueando determinados domínios de primeiro nível. Quando o domínio foi acessado, o firewall retornou a resposta HTTP 503 e uma página HTML indicando que o site estava bloqueado. O problema foi difícil de diagnosticar porque o site original que estou tentando se conectar usa SSL, e qualquer mensagem de erro é breve e concisa: "Não é possível estabelecer conexão SSL", "Conexão redefinida pelo par" etc. Usando o wget para acessar o A página também não ajuda, porque uma vez que recebe o erro 503, ele simplesmente sai sem salvar o HTML do novo.

Acabei resolvendo o problema configurando um simples servidor da Web HTTP não SSL usando o link do Python 3 no servidor em questão e, em seguida, tentar se conectar a ele a partir de um dispositivo problemático usando o módulo de pedidos do Python. Isso permitiu que eu visse o conteúdo da resposta e veja a página HTML "página bloqueada" do ISP.

    
por 07.02.2018 / 08:02
1

Com dois resultados completamente diferentes de duas conexões completamente diferentes, eu diria que o problema é o DNS, verifique se você está obtendo o mesmo IP em ambos os hosts. Você pode ter uma entrada de arquivo host em um desses também, então verifique isso.

    
por 06.02.2018 / 19:32