
Em um servidor que administramos para um cliente, nenhum aplicativo pode acessar determinados URLs HTTPS, por exemplo:
$ wget https://open-data.bielefeld.de/sites/default/files/alters_und_geschlechtsstruktur_ende2011bismitte2022.csv
--2022-12-21 15:59:58-- https://open-data.bielefeld.de/sites/default/files/alters_und_geschlechtsstruktur_ende2011bismitte2022.csv
Resolving open-data.bielefeld.de (open-data.bielefeld.de)... 194.8.223.72
Connecting to open-data.bielefeld.de (open-data.bielefeld.de)|194.8.223.72|:443... connected.
ERROR: cannot verify open-data.bielefeld.de's certificate, issued by ‘CN=Sectigo RSA Domain Validation Secure Server CA,O=Sectigo Limited,L=Salford,ST=Greater Manchester,C=GB’:
Unable to locally verify the issuer's authority.
To connect to open-data.bielefeld.de insecurely, use `--no-check-certificate'.
Vários programas (incluindo scripts R e Python) têm esse problema, mas posso acessar o URL do navegador do meu desktop sem problemas. Presumo que haja um problema com os certificados raiz ou com a cadeia de certificados. O servidor está executando o Ubuntu 20.04 LTS e todos os pacotes estão atualizados. O que poderia causar esse problema e existe uma maneira de corrigi-lo (de forma segura e simples) do meu lado?
Responder1
Na verdade, faltava um certificado, não um certificado raiz, mas um certificado intermediário. Os servidores HTTPS devem enviar todos os certificados da cadeia (menos a raiz) com sua resposta, mas alguns servidores não o fazem. Os navegadores da Web podem lidar com isso usando uma técnica chamada AIA (Authority Information Access) perseguindo*, porém muitos outros clientes não implementam isso.
Como Steffen Ulrich mencionou em seu comentário, você pode encontrar o certificado ausente e instalá-lo em seu sistema.
Primeiro pegue o certificado. Você pode fazer isso manualmente verificando o site emSSLLabse pesquisando no Google a impressão digital do certificado ausente. O certificado deve estar no formato PEM (codificado em base64 com BEGIN e END CERTIFICATE). Também escrevi um script para buscar o certificado via AIA antes de perceber que era possível fazer isso manualmente:https://github.com/jdmansour/fetch-intermediate-certs
Então, para importar o certificado no Ubuntu/Debian, coloque-o em /usr/share/ca-certificates/extra
(crie o diretório se necessário) e execute sudo dpkg-reconfigure ca-certificates
. Ele perguntará se você deve confiar em novos certificados nas atualizações do sistema - escolha qualquer opção que desejar, acho que "sim" é o padrão. Na próxima tela, você pode habilitar seu novo certificado. Deve ser adquirido pela maioria das ferramentas que usam OpenSSL imediatamente.
*) Pelo que eu sei, o Firefox não implementa AIA, mas de alguma forma funciona lá também.