Programing

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

lottogame 2020. 6. 4. 07:49
반응형

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 제거

Read it, then download the version of the certificates that includes the 'RSA-1024' certificates. https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt

Those will work with Mandrill.

Disabling SSL is a bad idea.


The above steps, though helpful, didnt work for me on Windows 8. I don't know the co-relation, but the below steps worked. Basically a change in the cacert.pem file. Hope this helps someone.

  • Download cacert.pem file from here: http://curl.haxx.se/docs/caextract.html
  • Save the file in your PHP installation folder. (eg: If using xampp – save it in c:\Installation_Dir\xampp\php\cacert.pem).
  • Open your php.ini file and add these lines:
  • curl.cainfo=”C:\Installation_Dir\xampp\php\cacert.pem” openssl.cafile=”C:\Installation_Dir\xampp\php\cacert.pem”
  • Restart your Apache server and that should fix it (Simply stop and start the services as needed).

I found new Solution without any required certification to call curl only add two line code.

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

If you don't have access to php.ini, adding this code (after your $ch = curl_init(); line) works for me:

$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);

Then, you will just need to download ca-bundle.crt and save it to location you specified in $certificate_location.


elaborating on the above answers for server deployment.

$hostname = gethostname();
if($hostname=="mydevpc")
{
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}

should do the trick for development environment without compromising the server when deployed.


I had the same issue during building my app in AppVeyor.

  • Download https://curl.haxx.se/ca/cacert.pem to c:\php
  • Enable openssl echo extension=php_openssl.dll >> c:\php\php.ini
  • Locate certificateecho curl.cainfo=c:\php\cacert.pem >> c:\php\php.ini

If none of the solutions above are working for you try updating your XAMPP installation to a newer version.

I was running XAMPP with php 5.5.11, the same exact code didn't work, I upgraded to XAMPP with php 5.6.28 and the solutions above worked.

Additionally only updating PHP didn't work either seems like a combination of apache and php settings on that version of XAMPP.

Hope it helps someone.


I have Very Simple Solution of this problem. You can do this without any certificate file..

Go on Laravel Root Folder -> Vender -> guzzlehttp -> guzzle -> src

open Client.php

find $defaults Array . that look like this way ..

$defaults = [
    'allow_redirects' => RedirectMiddleware::$defaultSettings,
    'http_errors'     => true,
    'decode_content'  => true,
    'verify'          => true,
    'cookies'         => false
];

Now main Job is to change value of verify key ..

'verify'          => false,

So After this it will not check SSL Certificate for CURL Request... This Solution is work for me. I find this solution after many research ...


I tried this it works

open

vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php

and change this

 $conf[CURLOPT_SSL_VERIFYHOST] = 2;
 `enter code here`$conf[CURLOPT_SSL_VERIFYPEER] = true;

to this

$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;

I got the error like :

failed loading cafile stream: `C:\xamppPhp\apache\bin\curl-ca-bundle.crt`

I am using windows machine. So I followed the below steps.

1. I have downloaded .pem file from " https://curl.haxx.se/docs/caextract.html "

2. Then I kept the downloaded file inside  "C:/xamppPhp/apache/bin/" folder and renamed the same downloaded file to "curl-ca-bundle.crt".

3. I restarted XAMPP and cleared the cache.
4. It's done.

Hope it may help someone


for guzzle you can try this :

$client = new Client(env('API_HOST'));
$client->setSslVerification(false);

tested on guzzle/guzzle 3.*

참고URL : https://stackoverflow.com/questions/28858351/php-ssl-certificate-error-unable-to-get-local-issuer-certificate

반응형