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 !!!

Greg
fonte
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);
trevo
fonte
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.

Rvanlaak
fonte
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