curl: (60) certificado SSL: não é possível obter o certificado de emissor local

root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
*   Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
Author: Chris Martin, 2014-07-07

16 answers

Relacionado com o "problema do certificado SSL: não é possível obter o erro do certificado de emissor local". Obviamente, isto aplica-se ao sistema que envia o pedido de CURL (e não ao servidor que recebe o pedido)

Faça o Download do mais recente cacert.pem de https://curl.haxx.se/ca/cacert.pem

2) Adicionar a seguinte linha ao php.ini (se isto é Hospedagem Compartilhada e você não tem acesso ao php.ini então você poderia adicionar isso .usuario.ini in in public_html)

curl.cainfo="/path/to/downloaded/cacert.pem"

Certifique-se de fechar o caminho com aspas duplas!!!

3) por omissão, o processo FastCGI processará novos ficheiros a cada 300 segundos (se necessário, poderá alterar a frequência adicionando alguns ficheiros, como sugerido aqui https://ss88.uk/blog/fast-cgi-and-user-ini-files-the-new-htaccess/)

 149
Author: Dahomz, 2018-06-27 06:51:43

Está a falhar porque o cURL não consegue verificar o certificado fornecido pelo servidor.

Há duas opções para fazer isto funcionar:

  1. Usar o cURL com a opção -k que permite ao curl fazer ligações inseguras, ou seja, o cURL não verifica o certificado.

  2. Adicionar a AC raiz (a AC a assinar o certificado do servidor) a etc/ssl/certs/ca-certificates.crt

Você deve usar a opção 2 porque é a opção que garante que você está se conectando para proteger FTP servidor.

 74
Author: Yuvika, 2018-07-03 12:48:13

Resolvi este problema adicionando um código de linha na escrita cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Atenção : isto torna o pedido inseguro (veja a resposta de @YSU)!

 54
Author: Vijay Bhandari, 2016-06-27 07:34:35

Teve este problema após instalar as extensões git v3. 48. Tentei instalar o mysysgit novamente, mas o mesmo problema. No final, teve que desativar (por favor, considere as implicações de segurança!) Verificação git SSL com:

git config --global http.sslVerify false

Mas se você tem um certificado de domínio melhor adicioná-lo a (Win7)

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
 15
Author: Riga, 2016-01-15 09:44:10
No meu caso, acabou por ser um problema com a instalação do meu certificado no serviço que estava a tentar consumir com caracol. não consegui agrupar / concatenar os certificados intermédios e root no meu certificado de domínio . Não era óbvio no início que este era o problema porque o Chrome trabalhou para fora e aceitou o certificado, apesar de deixar de fora os certificados intermediários e root. Depois de empacotar o certificado, tudo funcionou como devir. Eu agachei-me assim.
$ cat intermediate.crt >> domain.crt

E repetido para todos os certificados intermédios e root.

 10
Author: Daniel Watrous, 2016-03-08 14:07:11
Encontrámos este erro recentemente. Acontece que ele estava relacionado com o certificado de raiz não sendo instalado na diretoria da AC store corretamente. Estava a usar um comando de curvas onde estava a especificar o CA dir directamente. curl --cacert /etc/test/server.pem --capath /etc/test ... este comando estava a falhar todas as vezes com curl: (60) problema do certificado SSL: incapaz de obter o certificado de emissor local.

Depois de utilizar strace curl ..., determinou-se que o curl estava à procura do ficheiro do certificado de raiz com um nome de 60ff2731.0, que é baseado num convecção de nomes de hash do openssl. Então eu encontrei este comando para importar efetivamente o certificado de raiz corretamente:

Ln-s rootcert.pem ' openssl x509-hash-noout-in rootcert.pem`.0

Que cria uma ligação suave

60ff2731. 0 - > rootcert.pem

Curva, por baixo das capas lê o servidor.o certificado pem, determinou o nome do ficheiro do certificado de raiz (rootcert.pem), converteu - o para o seu nome de hash, em seguida, fez uma pesquisa de arquivo OS, mas não conseguiu encontrá-lo.

Então, o takeaway é, usar o strace quando correr o curl quando o erro de curl é obscuro (foi uma ajuda tremenda), e então certifique-se de instalar corretamente o certificado de raiz usando a Convenção de nomenclatura openssl.

 8
Author: gp-coder, 2016-03-21 23:08:18

É provavelmente um certificado em falta do servidor.

Root- > Intermediário - >Servidor

Um servidor deve enviar o servidor & intermediário como um mínimo.

Use {[0] } para depurar o problema.

Se apenas um certificado é devolvido (assinado por si próprio ou emitido), então você deve optar por:

  1. fixa o servidor
  2. confie nesse cert e adicione-o à sua loja de cert (não é a melhor ideia)
  3. desactiva a confiança, por exemplo curl -k (Muito mau idea)

Se o servidor voltou, mais de um, mas não incluindo um certificado autossignado (root):

  1. instale o certificado CA (root) na sua loja CA para esta cadeia, por exemplo, procure no google o emissor. ( apenas se confiares nesse CA)
  2. fixa o servidor para enviar a AC como parte da cadeia
  3. Confiem num cert na cadeia.
  4. desactivar a confiança

Se o servidor devolveu um certificado de 'root CA', então não está na sua loja de 'CA', as suas opções são:

  1. adiciona (confia) isso
  2. desactivar a confiança
Ignorei certs caducados / revogados porque não havia mensagens que indicassem isso. Mas você pode examinar as certs com openssl x509 -text

Dado que estás a ligar-te a uma edição caseira ( https://www.cerberusftp.com/support/help/installing-a-certificate / ) servidor ftp, vou dizer que é autossignado.

Por favor, publique mais detalhes, como o resultado do openssl.

 4
Author: Jason Pyeron, 2017-03-16 13:36:30
Para mim, uma simples instalação de certificados ajudou:
sudo apt-get install ca-certificates
 4
Author: Maxim Krušina, 2018-04-02 15:46:55
Nas janelas estava com um problema. O Curl foi instalado pelo mysysgit, por isso o download e a instalação da versão mais recente corrigiram o meu problema.

Caso contrário, estas são instruções decentes sobre como actualizar o seu certificado de AC que pode tentar.

 1
Author: Steve, 2014-09-25 03:49:54

No windows-se correr do cmd

> curl -X GET "https://some.place"

Telecarregamento cacert.pem de https://curl.haxx.se/docs/caextract.html

Definir a variável de ambiente:

CURL_CA_BUNDLE = C:\Program Files\curl-7.57.0\src\cacert.pem

E recarregar o ambiente

refreshenv
Agora tenta outra vez.

Razão do problema: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/replies/95548

 1
Author: RaSor, 2017-12-07 21:11:17
O meu caso era diferente. Estou a hospedar um site atrás de uma firewall. O erro foi causado pela pfSense.
Network layout: |Web Server 10.x.x.x| <-> |pfSense 49.x.x.x| <-> |Open Internet|
Encontrei acidentalmente a causa, graças a esta resposta.
Está tudo bem quando acedi ao meu site de WAN.

No entanto, quando o site foi acessado de dentro da LAN (por exemplo, quando o Wordpress fez um pedido curl para o seu próprio servidor, apesar de usar o WAN IP 49.x.x.x), ele foi servido a página de login pfSense.

Identifiquei o certificado como pfSense webConfigurator Self-Signed Certificate. Não admira que tenha cometido um erro.

Causa: o que aconteceu foi que {[1] } estava a usar o endereço IP WAN do site 49.x.x.x. Mas, no contexto do servidor web, o WAN IP era o firewall.

Depurar: descobri que estava a receber o certificado pfSense.

Solução: No servidor que hospeda o site, aponte o seu próprio nome de domínio para 127.0.0.1

Aplicando a solução, o pedido de curl foi adequadamente tratado pela web. servidor, e não encaminhado para o firewall que respondeu enviando a página de login.

 1
Author: pandalion98, 2018-03-31 15:46:23

Sim, também precisa de adicionar um certificado de AC. Adicionar um excerto de código no nó.js para uma visão clara.

var fs = require(fs)
var path = require('path')
var https = require('https')
var port = process.env.PORT || 8080;
var app = express();

https.createServer({
key: fs.readFileSync(path.join(__dirname, './path to your private key/privkey.pem')),
cert: fs.readFileSync(path.join(__dirname, './path to your certificate/cert.pem')),
ca: fs.readFileSync(path.join(__dirname, './path to your CA file/chain.pem'))}, app).listen(port)
 0
Author: Ravi Prakash, 2016-09-15 01:43:17
Até agora, vi este problema acontecer nas redes corporativas por duas razões, uma ou ambas podem estar a acontecer no seu caso:
    Por causa da forma como funcionam os proxies de rede, eles têm os seus próprios certificados SSL, alterando assim os certificados que o curl vê. Muitas ou a maioria das redes empresariais obrigam-no a usar estes proxies.
  1. Alguns programas antivírus em execução em PCs clientes também agem de forma semelhante a um proxy HTTPS, para que eles possam digitalizar o teu tráfego de rede. Seu programa antivírus pode ter uma opção para desativar esta função (assumindo que seus administradores o permitirão).

Como nota lateral, o nº 2 acima pode fazer com que se sinta desconfortável com o seu tráfego TLS supostamente seguro a ser digitalizado. É o mundo corporativo para ti.

 0
Author: rdguam, 2017-12-20 04:29:14

-k

(SSL) esta opção permite explicitamente ao curl executar SSL" inseguro" ligações e transferências. A começar com a curva 7.10, todas as SSL as ligações serão tentadas a ser seguras usando a AC pacote de certificados instalado por omissão. Isto faz todas as ligações considerado "inseguro" para falhar a menos que-k/--inseguro seja usado.

Man.cx/curl

 -1
Author: Geoffrey Hale, 2016-01-30 18:15:47

especificamente Para Windows usuários, usando curl-7.57.0-win64-mingw ou versão similar.

Isto é um pouco tarde, e as respostas existentes estão correctas. Mas eu ainda tive que lutar um pouco para colocá-lo trabalhando em minha máquina Windows, embora o processo é realmente muito direto para a frente. Então, compartilhando o processo passo a passo.

Este erro significa, basicamente, que o curl não está a verificar o certificado do URI-alvo. Se você confiar no emissor do certificado (CA), você pode adicionar isso para a lista de certificados confiáveis.

Para isso, navegue no URI (por exemplo, no cromado) e siga os passos

  1. carregue com o botão direito no ícone seguro do cadeado
  2. carregue no certificado, que abrirá uma janela com os detalhes do certificado
  3. ir para a página "caminho de certificação"
  4. carregue no certificado de raiz
  5. carregue no certificado ver, para abrir outra janela de certificados
  6. vá para a Página de detalhes
  7. Carregue em Copiar para o ficheiro, para abrir a exportação feiticeiro
  8. Carregue Em Seguinte
  9. seleccione ' Base-64 codificado X. 509 (.CER) "
  10. Carregue Em Seguinte
  11. dê um nome Amigável, Por exemplo 'MyDomainX.cer ' (procurar na pasta desejada)
  12. Carregue Em Seguinte
  13. Carregue em Terminar, para gravar o ficheiro do certificado
  14. Agora abra este ficheiro .cer e copie o conteúdo (incluindo- - - - - - BEGIN CERTIFICATE - - - - - - - - - and - - - - - END CERTIFICATE-----)
  15. Agora vá para a pasta onde curl.exe é gravado, por exemplo C:\SomeFolder\curl-7.57.0-win64-mingw\bin
  16. Abre o ficheiro curl-ca-bundle.crt com um editor de texto
  17. adicione o texto do certificado copiado ao fim do ficheiro. Gravar
Agora o seu comando deve executar bem em caracol.
 -1
Author: Arghya C, 2018-07-16 20:27:34

Solução simples: Em ~/.sdkman/etc/config, mudança sdkman_insecure_ssl=true

Passos:
nano ~/.sdkman/etc/config
variação sdkman_insecure_ssl=false em sdkman_insecure_ssl=true
gravar e sair

 -4
Author: biniam_Ethiopia, 2015-11-05 16:43:58