Eu sou novo no mundo Curl e Cacerts e estou enfrentando um problema ao me conectar a um servidor. Basicamente, preciso testar a conectividade através de https de uma máquina para outra. Eu tenho um URL ao qual preciso me conectar da Máquina A (uma máquina Linux). Tentei isso no prompt de comando.
cmd> curl https://[my domain or IP address]
e obteve o seguinte:
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Ao passar por alguns artigos pela internet, fiz o seguinte:
openssl s_client -connect <domain name or Ip address>:443
e obtive algumas respostas, incluindo o certificado do servidor (interno -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
).
O que devo fazer a partir daqui. Eu acho que vou ter que copiar e colar o texto dentro
BEGIN CERTIFICATE & END CERTIFICATE
e salvá-lo em um arquivo. Mas, que tipo de arquivo deve ser? .pem
, .crt
? .. O que devo ser fazer depois disso?
Eu tentei isso - copiei o texto dentro BEGIN CERTIFICATE & END CERTIFICATE
e salvei em um .crt
arquivo - o nomeei como my-ca.crt
(também tentei a mesma coisa nomeando-o como my-ca.pem
arquivo) e fiz o seguinte:
cmd>curl --cacert my-ca.crt https://[my domain or IP address]
Mas tenho o mesmo erro.
fonte
--insecure
para desconsiderar o erro SSL.Respostas:
Eu tive o mesmo problema - estava buscando uma página do meu próprio site, que era veiculada por HTTPS, mas o curl estava dando a mesma mensagem "Problema no certificado SSL". Eu trabalhei com isso adicionando um
-k
sinalizador à chamada para permitir conexões inseguras.Edit: Eu descobri a raiz do problema. Eu estava usando um certificado SSL (do StartSSL, mas não acho que isso importe muito) e não havia configurado o certificado intermediário corretamente. Se você está tendo o mesmo problema que o user1270392 acima, provavelmente é uma boa ideia testar seu certificado SSL e corrigir quaisquer problemas com ele antes de recorrer à
curl -k
correção.fonte
Solução simples
Esse é o meu roteiro diário:
Resultado:
fonte
--insecure
conexão através de TSL, todos os dias ...Você precisa fornecer toda a cadeia de certificados para enrolar, pois o enrolamento não é mais enviado com certificados de CA. Como a opção cacert pode usar apenas um arquivo, é necessário concaturar as informações da cadeia completa em 1 arquivo
Copie a cadeia de certificados (do seu navegador, por exemplo) para o binário codificado em DER x.509 (.cer). Faça isso para cada certificado.
Converta as certs em PEM e concatide-as em 1 arquivo.
Eu escrevi um blog sobre como fazer isso aqui: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html
fonte
use
--cacert
para especificar um.crt
arquivo.ca-root-nss.crt
por exemplo.fonte
Na verdade, eu tive esse tipo de problema e o resolvo com estas etapas:
Obtenha o pacote de certificados de CA raiz aqui: https://curl.haxx.se/ca/cacert.pem e salve-o no local
Encontre o
php.ini
arquivoDefina
curl.cainfo
como o caminho dos certificados. Então será algo como:curl.cainfo = /path/of/the/keys/cacert.pem
fonte
Aqui você pode encontrar os certificados CA com instruções para baixar e converter certificados Mozilla CA . Depois de obter
ca-bundle.crt
oucacert.pem
você apenas usa:ou
fonte
tendo resolvido o problema, fui capaz de usar o arquivo CA padrão do sistema existente, no debian6, é:
como root, isso pode ser feito como:
depois reinicie o servidor da web.
fonte
você poderia usar isso
curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);
fonte
Para mim, eu só queria testar um site que tivesse um redirecionamento http-> https automático. Eu acho que já tinha alguns certificados instalados, então isso sozinho funciona para mim no Ubuntu 16.04 em execução
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
curl --proto-default https <target>
fonte
Nas versões modernas do curl, você pode simplesmente substituir o endereço IP ao qual se conectar, usando --resolve ou --connect-to (curl mais recente que a versão 7.49). Isso funciona mesmo com SSL / SNI. Todos os detalhes estão na página do manual.
Por exemplo, para substituir o DNS e conectar-se a www.example.com com ssl usando um endereço IP específico: (Isso também substituirá o ipv6)
Outro exemplo, para conectar-se a um servidor de back-end específico chamado backend1 na porta 8080
Lembre-se de adicionar o cabeçalho do host se o servidor precisar responder corretamente:
fonte