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 서버를 다시 시작했지만 여전히 동일한 오류가 발생합니다.
나는 무엇을 시도 해야할지 정말로 모른다.
누구든지 내가 시도 할 수있는 다른 것에 대해 조언 할 수 있습니까?
마침내 이것을 작동 시켰습니다!
인증서 번들을 다운로드하십시오 .
어딘가에 두십시오. 제 경우에는
c:\wamp\
디렉토리 였습니다 (Wamp 64 비트를 사용하는 경우c:\wamp64\
).mod_ssl
Apache와php_openssl.dll
in에서 활성화하십시오php.ini
(;
처음 에 제거 하여 주석을 해제하십시오 ). 그러나 내 문제는 두 개의php.ini
파일이 있고 두 파일 모두 에서이 작업을 수행해야한다는 것입니다. 하나는 WAMP 작업 표시 줄 아이콘에서 얻은 것이고 다른 하나는 내 경우에는C:\wamp\bin\php\php5.5.12\
두
php.ini
파일 모두에서 인증서에 다음 줄을 추가 하십시오.curl.cainfo="C:/wamp/cacert.pem" openssl.cafile="C:/wamp/cacert.pem"
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 certificate
echo 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.*
'Programing' 카테고리의 다른 글
각도로 파일 업로드? (0) | 2020.06.04 |
---|---|
문자열로 단어를 대문자로 (0) | 2020.06.04 |
iPhone 디버깅 : '프로세스를 수행하지 못했습니다'를 해결하는 방법? (0) | 2020.06.04 |
MacOS에서 Boost를 어떻게 설치합니까? (0) | 2020.06.04 |
gulp로 디렉토리를 재귀 적으로 복사하는 방법은 무엇입니까? (0) | 2020.06.04 |