o certificado do ssl ou a chave remota do ssh não estava ok-C
tenho o seguinte código para me ligar a um site:
int main()
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "https://192.168.200.115:8080/appliances");
curl_easy_setopt(curl, CURLOPT_USERNAME, "myusername");
curl_easy_setopt(curl, CURLOPT_PASSWORD, "mypassword");
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// Perform the request, res will get the return code
res = curl_easy_perform(curl);
// Check for errors
if(res != CURLE_OK)
{
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
//always cleanup
curl_easy_cleanup(curl);
}
return 0;
}
Quando executado, obtive o erro: o certificado peer não pode ser autenticado com os certificados da AC indicados
Depois de pesquisar no Google, descobri que tinha de adicionar a linha:curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
mas agora eu recebo o erro: o certificado ssl ou a chave SSH remota não estava ok
tentei adicionar:
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2);
mas ainda assim o mesmo erro.
Como posso resolver isto??editar Adicionei um registo descritivo:
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
E agora vejo o seguinte na saída:
o nome do assunto do certificado ssl 'nome ou servidor' não corresponde à máquina de destino
2 answers
O certificado do servidor de SSL X. 509 enviado pelo servidor é inválido. Se quiser mesmo desactivar a verificação do certificado X. 509 (por favor, não o faça), deverá configurar o CURLOPT_SSL_ DIVERIFYHOST para 0 (por omissão para 2), de modo a pedir à libcurl para não falhar se o nome contido no certificado não corresponder à máquina a que está a tentar ligar-se. Se o fizer, terá provavelmente de deixar o CURLOPT_SSL_ VIERIFYPEER em 0, o que significa que não existe validação X. 509 PKI.
Muitos recomendam que não se ajuste o CURLOPT_SSL_VERIFYHOST e o CURLOPT_SSL_VERIFYPEER para zero. Dizem que deixa uma aberta aos ataques do homem-no-meio. OTOH, verificar certificados através das autoridades centrais também pode ser aberto a abuso de privacidade, uma vez que eles podem ser usados para rastrear sites que os usuários visitam, se essas autoridades podem ou não descriptografar seu conteúdo.
Isto responde.: não se pode ligar ao site HTTPS usando cURL. Devolve o conteúdo de 0 Comprimento Em alternativa. O que posso fazer fazer? resolvi-o por mim. Parece que o autor da libcurl lhe fornece o que o openSSL precisa, mas que o openSSL só fornece versões desactualizadas de. openSSL tem uma ferramenta para regenerar as autoridades de Certificados, um script chamadoc_rehash
, mas, descartando os usuários desse sistema operacional upstart, Windows, eles não fornecem um.bat ou outra versão de script do Windows, quando eles poderiam facilmente. O que a resposta acima faz nas portas da linha de comando para "C" e c++ facilmente. No Página
Ceras de extrato de caracol de Mozilla
Tem uma ligação a um cacert recentemente gerado.pem " file. Aqui está a ligação directa: http://curl.haxx.se/ca/cacert.pem
A versão" C " E C++ do seu uso é então:
curl_easy_setopt(curlHandle, CURLOPT_CAINFO,
"C:/Programming/Original/QT Projects/libcurlTest/libcurlTest/openssl/cacert.pem");
Isto permite - lhe utilizar os certificados da forma que se destinavam a ser utilizados; se for esse o seu objectivo.