컬 오류 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)).
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 루트 증명서 번들만 있으면 됩니다.갱신된 것을 인스톨 하는 것은 간단합니다.
최신 다운로드
cacert.pem
cURL 웹사이트에서 파일을 만들고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
'programing' 카테고리의 다른 글
python + NumPy / SciPy를 사용하여 롤링/이동 평균을 계산하는 방법 (0) | 2022.09.30 |
---|---|
python으로 요청을 포함한 "멀티파트/폼 데이터"를 전송하려면 어떻게 해야 합니까? (0) | 2022.09.30 |
지속성 단위는 RESOURCE_LOCAL 또는 JTA로 지정됩니까? (0) | 2022.09.30 |
단어 유사성에 대한 Regexp "n 문자 차이" (0) | 2022.09.30 |
Java에서 분수를 표시하는 가장 좋은 방법? (0) | 2022.09.23 |