PHP CURL CURLOPT_SSL_VERIFYPEER ignorado


117

Por algum motivo, não consigo usar CURL com HTTPS. Tudo estava funcionando bem até que fiz a atualização das bibliotecas curl. Agora estou tendo esta resposta ao tentar realizar solicitações CURL: Problema com o certificado SSL CA (caminho? Direitos de acesso?)

Seguindo as sugestões postadas aqui sobre questões relacionadas, tentei fazer o seguinte:

  • Desativar verificação para host e par

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
  • Habilite CURLOPT_SSL_VERIFYPEERe aponte para cacert.pem baixado de http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
  • Eu também tentei fazer a mesma coisa com o PositiveSSL.ca-bundle que foi fornecido como um certificado CA do pacote para o servidor ao qual estou tentando me conectar.

  • Edite as configurações do php ini com curl.cainfo=cacert.pem(arquivo no mesmo diretório e acessível pelo apache)

  • Renomear /etc/pki/nssdbpara/etc/pki/nssdb.old

Infelizmente, nenhuma das opções acima é capaz de resolver meu problema e eu sempre recebo a mensagem Problema com a mensagem SSL CA cert (caminho? Direitos de acesso?).

E eu não preciso dessa verificação em primeiro lugar (estou ciente dos problemas de segurança).

Alguém tem alguma outra sugestão?

ATUALIZAR

Depois de atualizar para as bibliotecas mais recentes e reiniciar de toda a caixa, não apenas o apache que eu estava fazendo parece estar funcionando de novo !!!


1
Você atualizou a biblioteca Curl compilada em uma pilha SSL diferente (GnuTLS vs OpenSSL, talvez)?
— Bruno

Acho que não. O sistema é Fedora 16 e foi o caso do yum update mesmo. O mais chato é que não preciso / quero toda essa validação e não consigo simplesmente desativá-la.
— Greg

Se você pretende usar HTTPS para segurança, sempre desejará ter esse processo de validação em vigor.
— Bruno

Estou ciente disso, porém meu caso de uso aqui torna tudo um pouco redundante. Além disso, atualizei o curl para o mais recente disponível e o php para 5.4. Agora, a mensagem de erro sumiu, mas também não recebo nenhum comentário do curl :)
— Greg

Ha, agora eu chego em algum lugar curl_errno função reporta status 77 que de acordo com o manual é CURLE_SSL_CACERT_BADFILE.
— Greg

Respostas:


240

De acordo com a documentação: para verificar o certificado do host ou do mesmo nível, você precisa especificar certificados alternativos com a CURLOPT_CAINFOopção ou um diretório de certificado pode ser especificado com a CURLOPT_CAPATHopção.

Veja também CURLOPT_SSL_VERIFYHOST:

  • 1 para verificar a existência de um nome comum no certificado de mesmo nível SSL.
  • 2 para verificar a existência de um nome comum e também verificar se ele corresponde ao nome do host fornecido.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

5
Desativar a verificação SSL remove praticamente toda a segurança do SSL de qualquer maneira. Em vez disso, você deve corrigir a configuração do PHP.
— Scopey de

7
@Scopey, mas às vezes você pode precisar dele em ambientes de desenvolvimento local com certificados autoassinados. Portanto, provavelmente não faz sentido em ambientes não públicos, mas como lembrete, é sempre melhor ter algum aviso no registro (por exemplo SSL verification disabled)
— Ivan Borshchov

2

Tivemos o mesmo problema em uma máquina CentOS7. Desativar o VERIFYHOST VERIFYPEERnão resolveu o problema, não tínhamos mais o erro cURL, mas a resposta ainda era inválida. Fazer um wgetpara o mesmo link que o cURL estava fazendo também resultou em um erro de certificado.

-> Nossa solução também foi reiniciar o VPS, isso resolveu e pudemos concluir a solicitação novamente.

Para nós, isso parecia ser um problema de corrupção de memória. Reinicializar o VPS recarregou a biblioteca na memória novamente e agora funciona. Portanto, se a solução acima @clovernão funcionar, tente reinicializar sua máquina.


Certifique-se de que não seja intermitente. Eu tive um problema com o paypal e verificação de pares, onde às vezes funcionava, às vezes não. Parecia aleatório. Configurando explicitamente o caminho do café e dizendo ao curl onde o problema foi resolvido.
— Neil Davis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.