복붙노트

HTTPS 및 SSL3_GET_SERVER_CERTIFICATE : 인증서 확인에 실패했으며 CA는 정상입니다.

PHP

HTTPS 및 SSL3_GET_SERVER_CERTIFICATE : 인증서 확인에 실패했으며 CA는 정상입니다.

나는 개발을 위해 XAMPP를 사용하고있다. 최근 xampp 설치를 이전 버전에서 1.7.3으로 업그레이드했습니다.

이제 HTTPS 사용 가능 사이트를 말릴 때 다음과 같은 예외가 발생합니다.

모든 사람들은 PHP 코드의 특정 컬 옵션을 사용하여이 문제를 해결할 것을 제안합니다. 나는 이것이 길이 아니어야한다고 생각합니다. 이전 버전의 XAMPP에는 아무런 문제가 없었기 때문에 새 버전을 설치 한 후에 만 ​​문제가 발생했습니다.

PHP 설치에서 어떤 설정이 변경되는지 알아 내려면 Apache 등이이 문제를 해결할 수있는 도움이 필요합니다.

해결법

  1. ==============================

    1.curl은 허용 된 CA 목록을 포함하지만 더 이상 CA 인증서를 번들로 사용하지 않습니다. 따라서 기본적으로 모든 SSL 인증서를 확인할 수 없도록 거부합니다.

    curl은 허용 된 CA 목록을 포함하지만 더 이상 CA 인증서를 번들로 사용하지 않습니다. 따라서 기본적으로 모든 SSL 인증서를 확인할 수 없도록 거부합니다.

    CA 인증서를 발급 받아야합니다. 자세한 내용은 cURLY의 서버 SSL 인증서 세부 정보를 참조하십시오.

  2. ==============================

    2.Windows에서 꽤 일반적인 문제입니다. cacert.pem을 curl.cainfo로 설정하면됩니다.

    Windows에서 꽤 일반적인 문제입니다. cacert.pem을 curl.cainfo로 설정하면됩니다.

    PHP 5.3.7부터 다음과 같이 할 수 있습니다 :

    그렇지 않으면 모든 cURL 리소스에 대해 다음 작업을 수행해야합니다.

    curl_setopt ($ch, CURLOPT_CAINFO, "PATH_TO/cacert.pem");
    
  3. ==============================

    3.경고 : SSL이 보호하도록 설계된 보안 문제가 발생할 수 있습니다.

    경고 : SSL이 보호하도록 설계된 보안 문제가 발생할 수 있습니다.

  4. ==============================

    4.출처 : http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html

    출처 : http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html

    위의 모든 정보 크레딧에 대한 정보 : http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html

  5. ==============================

    5.위의 솔루션은 훌륭하지만 WampServer를 사용한다면 php.ini의 curl.cainfo 변수가 작동하지 않는다는 것을 알 수 있습니다.

    위의 솔루션은 훌륭하지만 WampServer를 사용한다면 php.ini의 curl.cainfo 변수가 작동하지 않는다는 것을 알 수 있습니다.

    결국 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 파일에 추가해야합니다.

  6. ==============================

    6.경우에 따라 연결하려는 응용 프로그램에 자체 서명 된 인증서가 있으면 http://curl.haxx.se/ca/cacert.pem의 일반 cacert.pem으로 문제가 해결되지 않을 수 있습니다.

    경우에 따라 연결하려는 응용 프로그램에 자체 서명 된 인증서가 있으면 http://curl.haxx.se/ca/cacert.pem의 일반 cacert.pem으로 문제가 해결되지 않을 수 있습니다.

    서비스 엔드 포인트 URL에 대한 확신이 있다면 브라우저를 통해 "X 509 인증서 체인 (PEM)"형식으로 수동으로 인증서를 저장하십시오. 이 인증서 파일을

    curl_setopt ($ch, CURLOPT_CAINFO, "pathto/{downloaded certificate chain file}");   
    
  7. ==============================

    7.CURLOPT_CAINFO에 대한 컬 옵션을 설정할 때 큰 따옴표를 사용하면 작은 따옴표를 사용하는 것을 잊지 마십시오. 큰 따옴표를 사용하면 다른 오류 만 발생합니다. 따라서 옵션은 다음과 같아야합니다.

    CURLOPT_CAINFO에 대한 컬 옵션을 설정할 때 큰 따옴표를 사용하면 작은 따옴표를 사용하는 것을 잊지 마십시오. 큰 따옴표를 사용하면 다른 오류 만 발생합니다. 따라서 옵션은 다음과 같아야합니다.

    curl_setopt ($ch, CURLOPT_CAINFO, 'c:\wamp\www\mywebfolder\cacert.pem');
    

    또한 php.ini 파일 설정에서 다음과 같이 작성해야합니다 : (큰 따옴표 사용)

    curl.cainfo = "C:\wamp\www\mywebfolder"
    

    나는 이것을 다음과 같은 줄 바로 아래에 놓았다 : extension = php_curl.dll

    (정리 목적으로 만, php.ini의 어느 곳에 나 넣을 수 있습니다. 다른 curl 참조에 가깝게 두었습니다. 키워드 curl을 사용하여 검색 할 때 한 영역에서 두 컬 참조를 모두 찾습니다.)

  8. ==============================

    8.거룩한 모든 것에 대한 사랑 때문에 ...

    거룩한 모든 것에 대한 사랑 때문에 ...

    필자의 경우 openssl.cafile PHP 구성 변수를 PEM 파일 경로로 설정해야했습니다.

    나는 PHP의 설정에서 curl.cainfo를 설정하는 것이 정확히 필요한 많은 시스템이 있다는 것을 믿는다. 그러나 나는 함께 작업하고있는 환경에서 데비안 8 (jessie)을 사용하는 eboraas / laravel docker 컨테이너이다. )와 PHP 5.6에서 그 변수가 트릭을하지 않았다고 설정했습니다.

    필자는 php -i의 결과가 특정 설정에 대해서는 언급하지 않았지만 openssl에 대한 몇 줄을 가지고 있음을 확인했습니다. openssl.capath와 openssl.cafile 옵션이 있지만, 두 번째 설정은 PHP를 통해 최종적으로 HTTPS URL로 끝낼 수 있습니다.

  9. ==============================

    9.아마존 AMI 리눅스에서 같은 오류가 발생했습니다.

    아마존 AMI 리눅스에서 같은 오류가 발생했습니다.

    curl.cainfo를 /etc/php.d/curl.ini에 설정하여 해결했습니다.

    https://gist.github.com/reinaldomendes/97fb2ce8a606ec813c4b

  10. ==============================

    10.www.googleapis.com에서 페이지를 가져 오기 위해 GuzzleHttp (Mac의 경우 php + apache)를 가져올 때 여기에서 끝났습니다.

    www.googleapis.com에서 페이지를 가져 오기 위해 GuzzleHttp (Mac의 경우 php + apache)를 가져올 때 여기에서 끝났습니다.

    그것이 내게 도움이되는 경우에 대비 한 나의 최종 해결책이 여기있다.

    이 오류를 표시하는 도메인의 인증서 체인을 확인하십시오. 내게 그것은 googleapis.com이었다.

    openssl s_client -host www.googleapis.com -port 443
    

    다음과 같은 결과가 나옵니다.

    Certificate chain
     0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.googleapis.com
       i:/C=US/O=Google Inc/CN=Google Internet Authority G2
     1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
       i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
     2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
       i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
    

    참고 :이 문제를 해결 한 후 체인 출력이 다르게 보일 수 있습니다.

    그럼 당신은 PHP에서 허용되는 인증서를 봐야합니다. 페이지에서 phpinfo ()를 실행하십시오.

    <?php echo phpinfo();
    

    그런 다음 페이지 출력에서로드 된 인증서 파일을 찾습니다.

    openssl.cafile  /usr/local/php5/ssl/certs/cacert.pem
    

    올바른 인증서를 추가하여 수정해야하는 파일입니다.

    sudo nano /usr/local/php5/ssl/certs/cacert.pem
    

    기본적으로 올바른 인증서 "서명"을이 파일의 끝에 추가해야합니다.

    여기에서 그 중 일부를 찾을 수 있습니다. 필요한 경우 체인의 다른 사용자를 google / 검색해야 할 수도 있습니다.

    그들은 다음과 같이 보입니다 :

    (참고 : 이것은 이미지이므로 사람들은 단순히 stackoverflow에서 인증서를 복사 / 붙여 넣기하지 않습니다)

    일단 올바른 인증서가이 파일에 있으면 아파치를 다시 시작하고 테스트하십시오.

  11. ==============================

    11.해결책은 매우 간단합니다! curl_exec 앞에 다음 행을 추가하십시오.

    해결책은 매우 간단합니다! curl_exec 앞에 다음 행을 추가하십시오.

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    

    나를 위해 그것은 작동합니다.

  12. from https://stackoverflow.com/questions/6400300/https-and-ssl3-get-server-certificatecertificate-verify-failed-ca-is-ok by cc-by-sa and MIT license