programing

컬 오류 60, SSL 인증서 문제: 인증서 체인의 자체 서명된 인증서

javaba 2022. 9. 30. 10:38
반응형

컬 오류 60, SSL 인증서 문제: 인증서 체인의 자체 서명된 인증서

올바른 APP_로 curl 요청을 보내려고 합니다.ID, APP_SECRET 등

  https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI 

access_token을 취득해야 하는데 FALSE를 취득하여curl_error()그렇지 않으면 다음 메시지를 인쇄합니다.

60: SSL certificate problem: self signed certificate in certificate chain

암호는 다음과 같습니다.

    // create curl resource
    $ch = curl_init();

    // set url
    curl_setopt($ch, CURLOPT_URL, $url);
    //return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // $output contains the output string
    $output = curl_exec($ch);
    if ( ! $output) {
        print curl_errno($ch) .': '. curl_error($ch);
    }

    // close curl resource to free up system resources
    curl_close($ch);

    return $output;

위의 링크로 수동으로 이동하면 access_token이 잘 표시됩니다.왜 컬이 안 되지?도와주세요.

비활성화할 것을 제안하는 답변CURLOPT_SSL_VERIFYPEER받아 들여서는 안 됩니다.문제는 "왜 cURL에서는 작동하지 않는가?"입니다.Martijn Hols가 올바르게 지적한 것처럼 위험합니다.

이 오류는 CA 루트 증명서의 최신 번들이 없기 때문에 발생할 수 있습니다.일반적으로 이 파일은 호스트의 SSL 인증서를 확인하는 데 사용되는 여러 암호화 서명이 포함된 텍스트 파일입니다.

PHP 의 인스톨에 이러한 파일 중 하나가 포함되어 있는 것을 확인해, 최신의 파일인 것을 확인할 필요가 있습니다(여기서 다운로드:http://curl.haxx.se/docs/caextract.html)).

그런 다음 php.ini로 설정합니다.

curl.cainfo = <absolute_path_to> cacert.pem

실행 시 설정할 경우 (여기서)를 사용합니다.$ch = curl_init();):

curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");

이 회피책은 위험하므로 권장하지 않습니다.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

SSL 피어 검증을 디세블로 하는 것은 좋지 않습니다.이렇게 하면 요청이 MITM 공격자에게 노출될 수 있습니다.

실제로는 최신 CA 루트 증명서 번들만 있으면 됩니다.갱신된 것을 인스톨 하는 것은 간단합니다.

  1. 최신 다운로드cacert.pemcURL 웹사이트에서 파일을 만들고

  2. php.ini 파일에서 경로 설정(Windows의 경우):

    curl.cainfo=c:\php\cacert.pem

바로 그거야!

안전과 안전을 유지하십시오.

SSL 증명서가 시스템에 올바르게 인스톨 되어 있지 않은 경우는, 다음의 에러가 표시되는 일이 있습니다.

cURL 오류 60: SSL 인증서 문제: 로컬 발급자 인증서를 가져올 수 없습니다.

이 문제는 다음과 같이 해결할 수 있습니다.

https://curl.haxx.se/ca/cacert.pem 에서 갱신된 증명서 목록이 포함된 파일을 다운로드합니다.

다운로드한 파일을 이동하다cacert.pem시스템 내의 안전한 장소에 파일을 저장하다

의 갱신php.ini파일을 작성하고, 그 파일의 패스를 설정합니다.

중요:이 문제로 인해 며칠간 정신이 나갔고, 컬과 openssl 설치에서 무슨 일이 일어나고 있는지 알 수 없었습니다.나는 그것이 기한이 지난 중간 자격증(나의 경우, GoDaddy)이라는 것을 마침내 알았다.godaddy SSL 관리패널로 돌아가서 새로운 중간증명서를 다운받았더니 문제가 사라집니다.

여러분 중 일부는 이 문제에 대해 걱정하고 있을 것입니다.

보안 문제로 인해 GoDaddy가 중간 증명서를 변경한 것이 분명합니다.이러한 경고는 다음과 같습니다.

"다운로드한 번들에 포함된 새로운 SHA-2 중간 인증서를 사용하십시오."

제가 미쳐버려서 모든 서버에서 문제가 해결됐기 때문에 여러분 중 몇 분에게 도움이 되기를 바랍니다.

좀 더 구체적인 답변을 덧붙이자면, 저는 PHP HTTP 요청 패키지인 Guzzle v7을 사용할 때 이와 마주쳤습니다.Guzle을 사용하면 다음과 같이 우회할 수 있습니다.

use GuzzleHttp\Client;

$this->client = new Client([
    'verify' => false,
]);

원본 코멘트: https://github.com/guzzle/guzzle/issues/1490#issuecomment-375667460

오류: SSL 인증서 문제: 인증서 체인의 자체 서명된 인증서

Solution:
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);    
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

언급URL : https://stackoverflow.com/questions/21187946/curl-error-60-ssl-certificate-issue-self-signed-certificate-in-certificate-cha

반응형