개발에 XAMPP 를 사용 하고 있습니다. 최근에 xampp 설치를 이전 버전에서 1.7.3으로 업그레이드했습니다.
이제 HTTPS 사용 사이트를 컬링하면 다음 예외가 발생합니다.
치명적인 오류 : ‘cURL 리소스가 포함 된’RequestCore_Exception ‘예외가 발견되었습니다. cURL 오류 : SSL 인증서 문제입니다. CA 인증서가 올바른지 확인하십시오. 세부 사항 : 오류 : 14090086 : SSL 루틴 : SSL3_GET_SERVER_CERTIFICATE : 인증서 확인 실패 (60) ‘
이 문제를 해결하기 위해 PHP 코드의 특정 curl 옵션을 사용하는 것이 좋습니다. 나는 이것이 길이되어서는 안된다고 생각합니다. 이전 버전의 XAMPP에 문제가 없었고 새 버전을 설치 한 후에 만 발생했기 때문입니다.
PHP 설치에서 변경되는 설정, Apache 등 이이 문제를 해결할 수 있는지 알아내는 데 도움이 필요합니다.
답변
curl은 허용 된 CA 목록을 포함하는 데 사용되었지만 더 이상 모든 CA 인증서를 번들로 제공하지 않습니다. 따라서 기본적으로 모든 SSL 인증서를 확인할 수없는 것으로 거부합니다.
CA 인증서를 취득하고 컬을 가리켜 야합니다. 서버 SSL 인증서에 대한 cURLS 세부 사항에서 자세한 내용을 참조하십시오 .
답변
Windows에서 매우 일반적인 문제입니다. 로 설정 cacert.pem
하면 curl.cainfo
됩니다.
PHP 5.3.7부터 다음을 수행 할 수 있습니다.
- https://curl.haxx.se/ca/cacert.pem을 다운로드 하여 어딘가에 저장하십시오.
- 업데이트
php.ini
-curl.cainfo = “PATH_TO / cacert.pem”추가
그렇지 않으면 모든 cURL 리소스에 대해 다음을 수행해야합니다.
curl_setopt ($ch, CURLOPT_CAINFO, "PATH_TO/cacert.pem");
답변
경고 : SSL이 보호하도록 설계된 보안 문제가 발생하여 전체 코드베이스가 안전하지 않을 수 있습니다. 모든 권장 사례에 위배됩니다.
그러나 나를 위해 일한 정말 간단한 수정은 전화였습니다.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
전화하기 전에 :
curl_exec():
PHP 파일에서.
SSL 인증서의 모든 확인을 비활성화한다고 생각합니다.
답변
출처 : http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
컬 : SSL 인증서 문제, CA 인증서가 올바른지 확인하십시오.
2006 년 4 월 7 일
Curl로 보안 URL을 열면 다음 오류가 발생할 수 있습니다.
SSL 인증서 문제, CA 인증서가 올바른지 확인하십시오.
왜 오류가 발생했는지 그리고 어떻게해야하는지 설명하겠습니다.
오류를 제거하는 가장 쉬운 방법은 스크립트에 다음 두 줄을 추가하는 것입니다. 이 솔루션은 보안 위험을 초래합니다.
//WARNING: this would prevent curl from detecting a 'man in the middle' attack curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
이 두 매개 변수가 무엇을하는지 보자. 매뉴얼 인용.
CURLOPT_SSL_VERIFYHOST : 1-SSL 피어 인증서에 공통 이름이 있는지 확인하십시오. 2를 사용하여 공통 이름이 있는지 확인하고 제공된 호스트 이름과 일치하는지 확인하십시오.
CURLOPT_SSL_VERIFYPEER : CURL이 피어의 인증서 확인을 중지하려면 FALSE입니다. 확인할 다른 인증서는 CURLOPT_CAINFO 옵션으로 지정하거나 인증서 디렉토리는 CURLOPT_CAPATH 옵션으로 지정할 수 있습니다. CURLOPT_SSL_VERIFYPEER가 비활성화 된 경우 CURLOPT_SSL_VERIFYHOST도 TRUE 또는 FALSE 일 수 있습니다 (기본값은 2). CURLOPT_SSL_VERIFYHOST를 2 (기본값)로 설정하면 사용자에게 제공되는 인증서에 원격 리소스에 액세스하는 데 사용하는 URN과 일치하는 ‘공통 이름’이 있음을 보증합니다. 이것은 건전한 점검이지만 프로그램이 속지 않는다고 보장하지는 않습니다.
‘중간자’를 입력하십시오
프로그램이 대신 다른 서버와 통신하도록 오도 될 수 있습니다. 이것은 dns 또는 arp 중독과 같은 여러 메커니즘을 통해 달성 될 수 있습니다 (이것은 다른 날의 이야기입니다). 침입자는 프로그램이 예상하는 동일한 ‘comon name’으로 인증서에 자체 서명 할 수도 있습니다. 의사 소통은 여전히 암호화되어 있지만 사기꾼에게 비밀을 알려줄 것입니다. 이런 종류의 공격을 ‘중간자’라고합니다
‘중간에있는 남자’를 물리 치기
우리에게 제공되는 인증서가 실제에 적합한 지 확인해야합니다. 우리는 이것을 합리적인 * 신뢰하는 인증서와 비교함으로써이를 수행합니다.
Verisign, GeoTrust 등의 주요 CA 중 하나에서 발급 한 인증서로 원격 리소스를 보호하는 경우 http://curl.haxx.se/docs/caextract 에서 얻을 수있는 Mozilla의 CA 인증서 번들과 안전하게 비교할 수 있습니다
. .html
cacert.pem
서버 어딘가에 파일을 저장하고 스크립트에서 다음 옵션을 설정하십시오.curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");
위의 모든 정보 크레디트에 대한 정보 : http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
답변
위의 솔루션은 훌륭하지만 WampServer를 사용하는 경우 curl.cainfo
변수 설정이 php.ini
작동하지 않을 수 있습니다.
결국 WampServer에 두 개의 php.ini
파일 이 있음을 발견했습니다 .
C:\wamp\bin\apache\Apachex.x.x\bin
C:\wamp\bin\php\phpx.x.xx
첫 번째는 웹 브라우저를 통해 PHP 파일을 호출 할 때 사용되는 반면, 두 번째는 명령 줄 또는을 통해 명령을 호출 할 때 사용됩니다 shell_exec()
.
TL; DR
WampServer를 사용하는 경우 두 파일 모두에curl.cainfo
라인을 추가해야 합니다. php.ini
답변
거룩하신 모든 것의 사랑을 위해 …
필자의 경우 openssl.cafile
PHP 구성 변수를 PEM 파일 경로 로 설정해야했습니다 .
curl.cainfo
PHP의 설정 에서 설정 이 필요한 시스템이 많지만 Debian 8 (jessie) 및 PHP를 사용 하는 eboraas / laravel docker container 인 작업 환경에서 많은 시스템이 있다는 것은 매우 사실입니다 5.6, 그 변수를 설정하면 트릭을하지 못했습니다.
출력의 php -i
특정 구성 설정에 대해서는 언급하지 않았지만에 대한 몇 줄이 openssl
있습니다. 모두가 openssl.capath
및 openssl.cafile
옵션, 그러나 다만 마지막으로 HTTPS URL을 괜찮을 PHP를 통해 두 번째 허용 컬 설정은.
답변
연락하려는 응용 프로그램에 자체 서명 된 인증서가있는 경우 http://curl.haxx.se/ca/cacert.pem 의 일반 cacert.pem으로 문제가 해결되지 않는 경우가 있습니다.
서비스 엔드 포인트 URL에 대해 확신이있는 경우, 브라우저를 통해 해당 URL을 확인하고 “PEM (Chain with Chain) 인증서”형식으로 인증서를 수동으로 저장하십시오. 이 인증서 파일을
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/{downloaded certificate chain file}");