Ubuntu 10.04 / CURL: Como faço para corrigir / atualizar o CA Bundle?

17

Recentemente, atualizei nosso servidor de 8.04 para 10.04 e todo o software que o acompanha.

Pelo que encontrei on-line, parece que a nova versão do CURL não inclui um pacote CA e, como resultado, falha ao verificar se o certificado do servidor ao qual você está se conectando é assinado por uma autoridade válida .

O erro real é:

Erro CURL: problema no certificado SSL, verifique se o certificado da CA está OK.
Detalhes: erro: 14090086: rotinas SSL: SSL3_GET_SERVER_CERTIFICATE:
falha na verificação do certificado 

Algumas partes que encontrei sugerem a especificação manual de um arquivo CA ou a desativação da verificação, definindo uma opção quando você chama CURL, mas eu prefiro corrigir o problema globalmente, em vez de precisar modificar as chamadas CURL de cada aplicativo.

Existe uma maneira de corrigir o problema da CA do CURL em todo o servidor, para que todo o código de aplicativo existente funcione como está sem precisar ser modificado?

usuario
fonte

Respostas:

17

Eu estou tendo o mesmo problema e, depois de bisbilhotar um pouco, descobri que você pode baixar um pacote de CA-certs pronto para curl no ubuntu diretamente do site curl dev.

cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem

Agora, o curl usa o pacote mais atualizado e você está pronto.

Paul Alexander
fonte
1
Depois disso, tive que atualizar com: update-ca-certificates -f
Grain
9

Tive um problema semelhante com o Ubuntu 12.04 executando curl na linha de comando para obter as ferramentas de linha de comando aws que estavam no github. Eu descobri se eu executava a linha de comando como tal:

curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt

funcionaria. Mas tentar definir a variável de ambiente CURL_CA_BUNDLE para evitar o argumento "cacert" não funcionaria. Por fim, a atualização dos certificados ca pareceu resolver o problema:

sudo update-ca-certificates

Como uma observação lateral, a certa altura atualizei os certificados do curl.haxx.se que não resolveram o problema, mas podem ter sido relacionados. ( sudo wget http://curl.haxx.se/ca/cacert.pemfugir de /etc/ssl/certs).

Bob Morley
fonte
Link 404 para mim. Isso funciona: curl.haxx.se/ca/cacert.pem
dave1010
2
Hmm. Parece desonesto buscar um arquivo que contém certs como esse e não sobre HTTPS.
Matthew Schinckel
5

Normalmente, o software que não possui uma implementação exclusiva e é compilado no OpenSSL fará referência ao ca-bundle.crt em todo o sistema, geralmente localizado em /usr/share/ssl/certs.

O local pode ser diferente no Ubuntu, mas o pacote OpenSSL deve incluir o arquivo ca-bundle.

O CURL tem uma variedade de opções para especificar como verifica os certificados.

  • A CURL_CA_BUNDLEvariável de ambiente para o local do arquivo ca-bundle.
  • --capathpermite especificar o diretório em que os certificados da CA estão localizados. (Substitui CURL_CA_BUNDLE)
  • --cacert permite especificar o arquivo de certificado da CA.

No meu servidor CentOS, posso executar o seguinte para identificar o caminho do pacote CA usado pelo CURL:

$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt
Warner
fonte
1
O SSL aberto está instalado. Eu tenho um arquivo "ca-certificates.crt" em / etc / ssl / certs / que parece um monte de certificados concatenados juntos, mas acho que o CURL não está vendo isso? O CURL possui uma configuração para o CA-Bundle?
Nick
Tem certeza de que não é o tipo de certificado que está tentando verificar? As tecnologias mais recentes de certificado, como certificados de Verificação Estendida, geralmente exigem atualizações de pacotes configuráveis, pois os certificados raiz são relativamente novos. Confira minha próxima edição também.
Warner
O curl-config não parece ser um comando válido no Ubuntu. Como faço para definir CURL_CA_BUNDLE?
Nick
Parece que faz parte do libcurl3-openssl-devpacote com base em uma pesquisa rápida na Internet. CURL_CA_BUNDLEé apenas uma variável de ambiente. Na festança CURL_CA_BUNDLE=/path/to/file,.
Warner
Tudo bem, o pacote está instalado, mas "curl-config --ca" produz uma linha vazia. Tentei definir a variável usando 'CURL_CA_BUNDLE = "/ etc / ssl / certs / ca-certificates.crt"'. Mas "curl-config --ca" ainda produz uma linha em branco posteriormente.
Nick