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

Author: Harry Boy, 2014-07-30

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.

 5
Author: Remi Gacogne, 2014-07-31 14:17:53

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 chamado c_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.

 0
Author: CodeLurker, 2019-05-02 04:53:03