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.
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/)
Está a falhar porque o cURL não consegue verificar o certificado fornecido pelo servidor.
Há duas opções para fazer isto funcionar:
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.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.
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)!
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
$ cat intermediate.crt >> domain.crt
E repetido para todos os certificados intermédios e root.
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.
É 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:
- fixa o servidor
- confie nesse cert e adicione-o à sua loja de cert (não é a melhor ideia)
- 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):
- instale o certificado CA (root) na sua loja CA para esta cadeia, por exemplo, procure no google o emissor. ( apenas se confiares nesse CA)
- fixa o servidor para enviar a AC como parte da cadeia Confiem num cert na cadeia.
- 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:
- adiciona (confia) isso
- desactivar a confiança
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.
sudo apt-get install ca-certificates
Caso contrário, estas são instruções decentes sobre como actualizar o seu certificado de AC que pode tentar.
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
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.
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)
-
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.
- 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.
-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.
especificamente Para Windows
usuários, usando curl-7.57.0-win64-mingw
ou versão similar.
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
- carregue com o botão direito no ícone seguro do cadeado
- carregue no certificado, que abrirá uma janela com os detalhes do certificado
- ir para a página "caminho de certificação"
- carregue no certificado de raiz
- carregue no certificado ver, para abrir outra janela de certificados
- vá para a Página de detalhes
- Carregue em Copiar para o ficheiro, para abrir a exportação feiticeiro
- Carregue Em Seguinte
- seleccione ' Base-64 codificado X. 509 (.CER) "
- Carregue Em Seguinte
- dê um nome Amigável, Por exemplo 'MyDomainX.cer ' (procurar na pasta desejada)
- Carregue Em Seguinte
- Carregue em Terminar, para gravar o ficheiro do certificado
- Agora abra este ficheiro
.cer
e copie o conteúdo (incluindo- - - - - - BEGIN CERTIFICATE - - - - - - - - - and - - - - - END CERTIFICATE-----) - Agora vá para a pasta onde
curl.exe
é gravado, por exemploC:\SomeFolder\curl-7.57.0-win64-mingw\bin
- Abre o ficheiro
curl-ca-bundle.crt
com um editor de texto - adicione o texto do certificado copiado ao fim do ficheiro. Gravar
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