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:
python-certifi
e python3-certifi
, portanto, o python pode ver os certificados. Estou sentindo falta de algo sobre python ou algum cache, mas não consegui encontrar nada sensato.
Abaixo estão as informações solicitadas e os resultados da minha auditoria de três sistemas e o aplicativo da web:
/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. 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.
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.
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.