컬 오류 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 루트 인증서 번들 만 있으면됩니다. 업데이트 된 설치는 다음과 같이 쉽습니다.
- cURL 웹 사이트
cacert.pem
에서 최신 파일 다운로드 및 php.ini 파일에 경로 설정 (예 : Windows) :
curl.cainfo=c:\php\cacert.pem
그게 다야!
안전하고 안전하게 지내십시오.
안녕 얘들 아 : 매우 중요합니다! 이 문제는 며칠 동안 나를 미치게 만들었고 내 curl & openssl 설치에서 무슨 일이 벌어지고 있는지 알 수 없었습니다. 마침내 구식 인 중간 인증서 (제 경우에는 GoDaddy)라는 사실을 알게되었습니다. godaddy SSL 관리자 패널로 돌아가서 새 중간 인증서를 다운로드했는데 문제가 사라졌습니다.
여러분 중 일부에게는 이것이 문제라고 확신합니다.
분명히 GoDaddy는 보안 문제로 인해 어느 시점에서 중간 인증서를 변경했으며 이제 다음 경고를 표시합니다.
"다운로드 한 번들에 포함 된 새 SHA-2 중간 인증서를 사용해야합니다."
내가 미쳐 가고 모든 서버의 문제를 정리했기 때문에 이것이 여러분 중 일부에게 도움이되기를 바랍니다.
If the SSL certificates are not properly installed in your system, you may get this error:
cURL error 60: SSL certificate problem: unable to get local issuer certificate.
You can solve this issue as follows:
Download a file with the updated list of certificates from https://curl.haxx.se/ca/cacert.pem
Move the downloaded cacert.pem
file to some safe location in your system
Update your php.ini
file and configure the path to that file:
'Program Tip' 카테고리의 다른 글
.NET의 String.Format에 해당하는 Java (0) | 2020.12.02 |
---|---|
자바의 ConcurrentHashMap 및 Hashtable (0) | 2020.12.02 |
자바 스크립트 사용을 위해 C #의 이스케이프 따옴표 (0) | 2020.12.02 |
Python에서 문자열 찾기의 예 (0) | 2020.12.02 |
개체 목록에 대해 동일한 메서드를 호출하는 방법은 무엇입니까? (0) | 2020.12.02 |