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

올바른 APP_ID, APP_SECRET 등을 사용하여 curl 요청을

  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 루트 인증서의 최신 번들이 없기 때문에 발생했을 수 있습니다. 일반적으로 curl이 호스트의 SSL 인증서를 확인하는 데 사용하는 암호화 서명이 포함 된 텍스트 파일입니다.

PHP 설치에 이러한 파일 중 하나가 있고 최신 파일인지 확인해야합니다 (그렇지 않으면 http://curl.haxx.se/docs/caextract.html에서 다운로드 하십시오 ).

그런 다음 php.ini에서 설정하십시오 .

curl.cainfo = <absolute_path_to> cacert.pem

런타임에 설정하는 경우 다음을 사용하십시오.

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


답변

이 해결 방법은 위험 하고 바람직하지 :

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

SSL 피어 확인을 비활성화하는 것은 좋은 생각이 아닙니다. 그렇게하면 MITM 공격자에게 요청이 노출 될 수 있습니다.

실제로 최신 CA 루트 인증서 번들 만 있으면됩니다. 업데이트 된 설치는 다음과 같이 쉽습니다.

  1. cURL 웹 사이트cacert.pem 에서 최신 파일 다운로드 및

  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파일을 업데이트 하고 해당 파일의 경로를 구성하십시오.


답변

중요 :이 문제는 며칠 동안 저를 미치게했고 curl 및 openssl 설치에서 무슨 일이 벌어지고 있는지 알 수 없었습니다. 마침내 구식 인 중간 인증서 (제 경우에는 GoDaddy)라는 사실을 알게되었습니다. godaddy SSL 관리자 패널로 돌아가서 새 중간 인증서를 다운로드했는데 문제가 사라졌습니다.

여러분 중 일부에게는 이것이 문제라고 확신합니다.

분명히 GoDaddy는 보안 문제로 인해 어느 시점에서 중간 인증서를 변경했으며 이제 다음 경고를 표시합니다.

“다운로드 한 번들에 포함 된 새 SHA-2 중간 인증서를 사용해야합니다.”

내가 미쳐 가고 모든 서버에서 문제를 해결했기 때문에 이것이 여러분 중 일부에게 도움이되기를 바랍니다.


답변

오류 : 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);


답변