ligação https a usar a curva a partir da linha de comandos

Sou novo no mundo do Curl e Cacerts e estou a enfrentar um problema ao ligar-me a um servidor. Basicamente, preciso de testar a conectividade sobre https de uma máquina para outra. Eu tenho um URL ao qual eu preciso conectar a partir da máquina A (uma máquina linux) Eu tentei isso no comando imediatamente

cmd> curl https://[my domain or IP address]

e tem 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 ler alguns artigos na internet, fiz isto:
openssl s_client -connect <domain name or Ip address>:443
E teve alguma resposta, incluindo a certificado do servidor (dentro -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----).

O que devo fazer a seguir? Acho que vou ter de copiar o texto para dentro. E guarda - o num ficheiro. Mas, Que tipo de arquivo deve ser? .pem, .crt ?.. O que devo fazer depois disso?

tentei isto-copiei o texto dentro de BEGIN CERTIFICATE & END CERTIFICATE e gravei-o num ficheiro .crt chamado de my-ca.crt (também tentei a mesma coisa, nomeando-o como ficheiro my-ca.pem) e depois fez isto:

cmd>curl --cacert my-ca.crt https://[my domain or IP address]
Mas tenho o mesmo erro.

Author: Tshepang, 2012-04-10

9 answers

Eu tive o mesmo problema - eu estava obtendo uma página de meu próprio site, que foi servido sobre HTTPS, mas curl estava dando a mesma mensagem "problema de certificado SSL". Eu trabalhei em torno dele adicionando uma bandeira -k à chamada para permitir conexões inseguras.

curl -k https://whatever.com/script.php

Editar: descobri a raiz do problema. Eu estava usando um certificado SSL (do StartSSL, mas eu não acho que isso importa muito) e não tinha configurado o certificado intermediário corretamente. Se você está tendo o mesmo problema que user1270392 acima, é provavelmente uma boa idéia para testar o seu certificado SSL e resolver quaisquer problemas com ele antes de recorrer à correção curl -k.

 95
Author: Dave Child, 2014-02-22 11:28:11

Solução simples

É o meu guião diário.
curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

Ouput:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to host www.google.com left intact
 20
Author: Antonio Feitosa, 2018-09-19 19:10:41

Tens de fornecer toda a cadeia de certificados para enrolar, uma vez que a curva já não tem qualquer certificado. Uma vez que a opção cacert só pode usar um ficheiro, você precisa de combinar a informação completa da cadeia em 1 ficheiro

Copie a cadeia de certificados (do seu navegador, por exemplo) para o binário codificado em DER X. 509 (.cer). Faz isto por cada cert.

Converte os certificados em PEM, e concata-os em 1 ficheiro.

openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text

cat *.pem > certRepo

curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"
Escrevi um blog sobre como fazer isso aqui.: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html
 18
Author: Somaiah Kumbera, 2016-05-18 09:07:11

Utilize --cacert para indicar um ficheiro .crt. ca-root-nss.crt por exemplo.

 12
Author: ano, 2013-04-30 10:31:07
Na verdade, tinha este tipo de problema e resolvia-o por estes passos:
  1. Obtenha o pacote de certificados root CA daqui: https://curl.haxx.se/ca/cacert.pem e guarda-o no local.

  2. Procurar o ficheiro php.ini

  3. Define o curl.cainfo Como Sendo o caminho dos certificados. Por isso vai ser algo como:

curl.cainfo = /path/of/the/keys/cacert.pem

 4
Author: geckob, 2016-02-17 09:22:46

Aqui poderá encontrar os certificados das CA com instruções para transferir e converter os certificados das CA Mozilla. Assim que tiver ca-bundle.crt ou cacert.pem, use apenas:

curl.exe --cacert cacert.pem https://www.google.com

Ou

curl.exe --cacert ca-bundle.crt https://www.google.com
 1
Author: lmiguelmh, 2014-12-08 17:31:21
Tendo dignificado o problema Eu fui capaz de usar o arquivo AC padrão do sistema existente, no debian6 este é:
/etc/ssl/certs/ca-certificates.crt

Como raiz isto pode ser feito como:

echo curl.cainfo=/etc/ssl/certs/ca-certificates.crt >> /etc/php5/mods-available/curl.ini

Então reinicie o servidor web.

 1
Author: Jasen, 2016-12-07 22:18:36

Isto dava-te jeito

curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);

 1
Author: Ahmed Ali, 2018-03-13 09:11:29
Para mim, só queria testar um site que tivesse um redirecionamento http->https automático. Acho que já instalei algumas certs, por isso só isto funciona comigo 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>

 0
Author: SamCyanide, 2018-01-08 19:01:32