Obtendo erro de verificação de certificado com falha em um aplicativo Python

0

Por muito tempo, estou usando nvpy como SimpleNote cliente nos meus sistemas Debian. Recentemente, um dos meus sistemas parou de sincronizar com o serviço da Web abruptamente. Pensei nas alterações da API ou algo semelhante, no entanto, quando tentei usar o mesmo aplicativo (mesma versão) em outros sistemas, tudo está funcionando perfeitamente.

Depurei o problema em meu sistema problemático e descobri que o sistema está recebendo um erro SSL: CERTIFICATE_VERIFY_FAILED ao tentar se comunicar com o servidor. Eu tentei entender mais, mas falhei. Atualmente, meu conhecimento sobre o problema é o seguinte:

  • Certificados do sistema estão OK. O Firefox pode verificar os certificados SSL sem problemas.
  • Eu instalei os pacotes python-certifi e python3-certifi , portanto, o python pode ver os certificados.
  • O aplicativo está funcionando bem em outros dois sistemas Debian. Todos estão executando o Debian Testing e estão sempre atualizados.
  • Uma instalação independente do software recebe o mesmo erro, portanto, o aplicativo não está corrompido ou armazena algo em seu diretório de instalação.

Estou sentindo falta de algo sobre python ou algum cache, mas não consegui encontrar nada sensato.

Atualização 1:

Abaixo estão as informações solicitadas e os resultados da minha auditoria de três sistemas e o aplicativo da web:

  • O aplicativo reside no link . Um exemplo de terminal REST é o link . Todo o domínio é assinado pela autoridade de autoridade de certificação do Google, G2, com um certificado até 6 de dezembro de 2017. É um SHA-256 de 2048 bits PKCS # 1 com RSA.
  • Quando examino meus três sistemas, um sistema é completamente o mesmo com o sistema problemático (verificado /etc/ssl/certs com md5deep ). Um sistema tem certs extras, mas um dos sistemas normais que funcionam não os possui, então esse não é o problema.
  • Todos os sistemas têm python-certifi pacote instalado.

Resultado: Todos os três sistemas possuem certificados idênticos, um tem um extra. Certificados extras não importam, porque um sistema com certificados extras tem uma instalação nvPY em funcionamento.

Atualização 2:

Parece que o urllib2 do Python não pode encontrar os certificados por si só. Quando eu forneço um contexto personalizado com o capath fornecido por certifi.where() , as coisas retornam ao normal. A parte estranha é que outros sistemas não precisam desse contexto personalizado. Vou tentar encontrar diferenças entre os sistemas de trabalho e não trabalho seguinte.

Atualização 3:

Eu escrevi uma pequena ferramenta que se conecta a URLs arbitrárias e testa a conectividade com urllib2 e, estranhamente, a ferramenta funciona corretamente. Mais estranhamente, transplantar o código problemático para minha ferramenta não cria problemas (funciona como deveria). O problema está na base de código de nvPY . Vai abrir um relatório de bug e, vai funcionar a partir deste ponto.

    
por bayindirh 01.10.2017 / 14:04

0 respostas