[php] PHP-SSL 인증서 오류 : 로컬 발급자 인증서를 가져올 수 없습니다

Windows 7에서 XAMPP의 일부로 PHP 버전 5.6.3을 실행하고 있습니다.

Mandrill API를 사용하려고하면 다음 오류가 발생합니다.

‘메시지 / 송신 템플릿에 대한 API 호출 실패 : SSL 인증서 문제 : 로컬 발급자 인증서를 가져올 수 없음’메시지와 함께 ‘Mandrill_HttpError’예외가 발생했습니다.

php.ini 파일에 다음을 추가하는 것을 포함하여 StackOverflow에서 읽은 모든 것을 이미 시도했습니다.

curl.cainfo = "C:\xampp\php\cacert.pem"

물론 http://curl.haxx.se/docs/caextract.html 에서 cacert.pem 파일을 해당 위치로 다운로드했습니다 .

그러나 결국 XAMPP와 Apache 서버를 다시 시작했지만 여전히 동일한 오류가 발생합니다.

나는 무엇을 시도 해야할지 정말로 모른다.

누구든지 내가 시도 할 수있는 다른 것에 대해 조언 할 수 있습니까?



답변

마침내 이것을 작동 시켰습니다!

  1. 인증서 번들을 다운로드하십시오 .

  2. 어딘가에 넣으십시오. 제 경우에는 c:\wamp\디렉토리 였습니다 (Wamp 64 비트를 사용하는 경우 c:\wamp64\).

  3. mod_sslApache와 php_openssl.dllin에서 활성화하십시오 php.ini( ;처음 에 제거 하여 주석을 해제하십시오 ). 그러나 내 문제는 두 개의 php.ini파일이 있고 두 파일 모두 에서이 작업을 수행해야한다는 것입니다. 하나는 WAMP 작업 표시 줄 아이콘에서 얻은 것이고 다른 하나는 내 경우에는C:\wamp\bin\php\php5.5.12\

  4. php.ini파일 모두에서 인증서에 다음 줄을 추가 하십시오.

    curl.cainfo="C:/wamp/cacert.pem"
    openssl.cafile="C:/wamp/cacert.pem"
  5. Wamp 서비스를 다시 시작하십시오.


답변

면책 조항 :이 코드는 서버를 안전하지 않게 만듭니다.

줄 번호 65 뒤에 Mandrill.php 파일에서 $ this-> ch = curl_init ();

다음 두 줄을 추가하십시오.

curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);

이것은 내 문제를 해결하고 localhost를 사용하여 전자 메일을 보냈지 만 라이브 버전 라이브에서는 사용하지 않는 것이 좋습니다. 라이브 서버에서 코드는이 코드없이 작동해야합니다.


답변

감사합니다 @Mladen Janjetovic,

귀하의 제안은 ampps가 설치된 Mac에서 저에게 효과적이었습니다.

복사 : http://curl.haxx.se/ca/cacert.pem

에: /Applications/AMPPS/extra/etc/openssl/certs/cacert.pem

그리고 php.ini그 경로로 업데이트 하고 Apache를 다시 시작했습니다.

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
openssl.cafile="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"

그리고 Windows AMPPS 설치에서 동일한 설정을 적용했으며 완벽하게 작동했습니다.

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/Ampps/php/extras/ssl/cacert.pem"
openssl.cafile="C:/Ampps/php/extras/ssl/cacert.pem"

: amp과 동일합니다.

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"
openssl.cafile="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"

localhost에 SAN을 사용하여 새 SSL 인증서를 생성하려는 경우이 게시물의 단계가 도움 되었습니다 Centos 7 / Vagrant / Chrome Browser.


답변

당신이 볼 때 http://curl.haxx.se/docs/caextract.html의 페이지를, 당신은 섹션이라는 큰 글자에서 알 수 있습니다 :

RSA-1024 제거

이를 읽고 ‘RSA-1024’인증서가 포함 된 인증서 버전을 다운로드하십시오.
https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt

그것들은 Mandrill과 함께 작동합니다.

SSL을 비활성화하는 것은 나쁜 생각입니다.


답변

위의 단계는 도움이되었지만 Windows 8에서는 효과가 없었습니다. 나는 상관 관계를 모르지만 아래 단계는 효과적이었습니다. 기본적으로 cacert.pem 파일이 변경되었습니다. 이것이 누군가를 돕기를 바랍니다.

  • http://curl.haxx.se/docs/caextract.html 에서 cacert.pem 파일을 다운로드하십시오.
  • PHP 설치 폴더에 파일을 저장하십시오. (예 : xampp를 사용하는 경우 – c : \ Installation_Dir \ xampp \ php \ cacert.pem에 저장하십시오).
  • php.ini 파일을 열고 다음 줄을 추가하십시오 :
  • curl.cainfo =”C : \ Installation_Dir \ xampp \ php \ cacert.pem”openssl.cafile =”C : \ Installation_Dir \ xampp \ php \ cacert.pem”
  • Apache 서버를 다시 시작하면 문제가 해결됩니다 (필요에 따라 서비스를 중지하고 시작하십시오).

답변

curl을 호출하는 데 필요한 인증이없는 새로운 솔루션을 발견하면 두 줄 코드 만 추가하십시오.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);


답변

php.ini에 액세스 할 수 없다면 이 코드를 추가하면 $ch = curl_init();나에게 효과적입니다.

$certificate_location = "C:\Program Files (x86)\EasyPHP-Devserver-16.1\ca-bundle.crt"; // modify this line accordingly (may need to be absolute)
curl_setopt($ch, CURLOPT_CAINFO, $certificate_location);
curl_setopt($ch, CURLOPT_CAPATH, $certificate_location);

그런 다음 ca-bundle.crt 를 다운로드 하여에 지정한 위치에 저장하면됩니다 $certificate_location.