올바른 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 루트 인증서 번들 만 있으면됩니다. 업데이트 된 설치는 다음과 같이 쉽습니다.
-
cURL 웹 사이트
cacert.pem
에서 최신 파일 다운로드 및 -
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);