PHP - SSL 인증서 오류: 로컬 발급자 인증서를 가져올 수 없습니다.
Windows 7에서 XAMPP의 일부로 PHP 버전 5.6.3을 실행하고 있습니다.
Mandrill API를 사용하려고 하면 다음 오류가 나타납니다.
메시지/전송 템플릿에 대한 API 호출 실패: SSL 인증서 문제: 로컬 발급자 인증서를 가져올 수 없음' 메시지와 함께 수집되지 않은 예외 'Mandrill_HttpError'
StackOverflow에서 읽은 모든 것을 시도해 보았습니다.이것에는 php.ini 파일에 다음 항목이 추가되어 있습니다.
curl.cainfo = "C:\xampp\php\cacert.pem"
물론 http://curl.haxx.se/docs/caextract.html에서 cacert.pem 파일을 다운로드했습니다.
그 후 XAMPP와 Apache 서버를 재기동했지만, 같은 에러가 발생.
또 뭘 해야 할지 모르겠어요.
제가 또 무엇을 시도해 볼 수 있는지 조언해 주실 수 있나요?
드디어 작동하게 됐어!
증명서 번들을 다운로드합니다.
어디다 놔둬요. 저저우 in in 였습니다.
c:\wamp\
를 사용하고 「」(Wamp 64 비트를 사용하고 있는 경우),c:\wamp64\
를 참조해 주세요.능능 enable enable enable enable를 유효하게
mod_ssl
및 Apache »php_openssl.dll
php.ini
합니다.;
하지만 해라, 내 는 두 개가 것이었다.php.ini
두 파일 모두에서 이 작업을 수행해야 합니다. 수 있는 이고, 는 WAMP 태스크바아이콘에서 얻을 수 있는 하나는 'WAMP'입니다.C:\wamp\bin\php\php5.5.12\
두 하세요.
php.ini
삭제:curl.cainfo="C:/wamp/cacert.pem" openssl.cafile="C:/wamp/cacert.pem"
Wamp 서비스를 재시작합니다.
편집자 주의: SSL 검증을 비활성화하면 보안에 영향이 있습니다.SSL/HTTPS 연결의 신뢰성을 확인하지 않으면 악의적인 공격자가 신뢰할 수 있는 엔드포인트(GitHub 또는 기타 원격 Git 호스트 등)로 가장하여 중간자 공격에 취약해질 수 있습니다.
이를 해결책으로 사용하기 전에 보안 문제를 완전히 이해해야 합니다.
$this->ch = curl_init()라고 되어 있는 65행 뒤에 Mandrill.php 파일에서 같은 문제가 발생했습니다.
다음 두 줄을 추가합니다.
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
이것으로 문제가 해결되어 localhost를 사용하여 이메일도 보내졌지만 라이브 버전에서는 사용하지 않는 것이 좋습니다.라이브 서버에서는, 이 코드가 없어도 동작합니다.
@Laden Janjetovic님 감사합니다.
암페어가 설치된 맥에서는 당신의 제안이 효과가 있었습니다.
복사됨: http://curl.haxx.se/ca/cacert.pem
수신인: /Applications/AMPPS/extra/etc/openssl/certs/cacert.pem
갱신된 ★★★★★★★★★★★★★★★★★★」php.ini
아파치
[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"
: wamp도 마찬가지입니다.
[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"
로컬 호스트용 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
그것들은 맨드릴과 함께 작동될 것이다.
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 서버를 재시작하면 해결됩니다(필요에 따라 서비스를 중지하고 시작하십시오).
주의: SSL 검증을 비활성화하면 보안에 영향이 있습니다.SSL/HTTPS 연결의 신뢰성을 확인하지 않으면 악의적인 공격자가 신뢰할 수 있는 엔드포인트(GitHub 또는 기타 원격 Git 호스트 등)로 가장하여 중간자 공격에 취약해질 수 있습니다.
이를 해결책으로 사용하기 전에 보안 문제를 완전히 이해해야 합니다.
콜컬은 2개의 라인 코드만 추가하는데 필요한 인정이 없는 새로운 솔루션을 찾았습니다.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
php.ini에 액세스할 수 없는 경우 이 코드를 추가합니다.$ch = curl_init();
line은 나에게.
$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
.
편집자 주의: SSL 검증을 비활성화하면 보안에 영향이 있습니다.SSL/HTTPS 연결의 신뢰성을 확인하지 않으면 악의적인 공격자가 신뢰할 수 있는 엔드포인트(GitHub 또는 기타 원격 Git 호스트 등)로 가장하여 중간자 공격에 취약해질 수 있습니다.
이를 해결책으로 사용하기 전에 보안 문제를 완전히 이해해야 합니다.
이거 해봤는데 잘 되네
열다.
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
그리고 이것을 바꿔라
$conf[CURLOPT_SSL_VERIFYHOST] = 2;
$conf[CURLOPT_SSL_VERIFYPEER] = true;
여기에
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
주의: SSL 검증을 비활성화하면 보안에 영향이 있습니다.SSL/HTTPS 연결의 신뢰성을 확인하지 않으면 악의적인 공격자가 신뢰할 수 있는 엔드포인트(GitHub 또는 기타 원격 Git 호스트 등)로 가장하여 중간자 공격에 취약해질 수 있습니다.
이를 해결책으로 사용하기 전에 보안 문제를 완전히 이해해야 합니다.
서버 도입에 관한 상기의 회답에 대해 설명합니다.
$hostname = gethostname();
if($hostname=="mydevpc")
{
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
도입 시 서버를 손상시키지 않고 개발 환경에 적합한 기능을 수행해야 합니다.
로컬 시스템에서 이와 같은 문제가 발생했지만 라이브 서버에서는 발생하지 않았습니다.이 페이지에서는 이전에 다른 솔루션도 언급했지만 localhost.so에서는 동작하지 않았습니다.localhost-WAMP Server에서 동작하는 새로운 솔루션을 찾습니다.
cURL 오류 번호:SSL 인증서 문제: 로컬 발급자를 가져올 수 없습니다. 인증서.
시스템이 드라이브에서 cacert.pem을 찾을 수 없는 경우가 있습니다.따라서 CURL을 사용하는 코드에서 이를 정의할 수 있습니다.
OPEN-SSL 라이브러리의 액티브 등, 이것에 관한 모든 조건을 만족하고 있는 것에 주의해 주세요.
이 CURL 코드를 확인합니다.
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL =>$url,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER=> true,
));
curl_setopt($curl, CURLOPT_CAINFO, "f:/wamp/bin/cacert.pem"); // <------
curl_setopt($curl, CURLOPT_CAPATH, "f:/wamp/bin/cacert.pem"); // <------
$response = json_decode(curl_exec($curl),true);
$err = curl_error($curl);
curl_close($curl);
그러나 이 솔루션은 절대 경로 cacert로 인해 라이브 서버에서는 작동하지 않을 수 있습니다.펨
Amazon Linux(CentOS/Red Hat 등)에서 이 문제를 해결하기 위해 다음 작업을 수행했습니다.먼저 http://curl.haxx.se/ca/cacert.pem에서 다운로드한 cacert.pem을 복사하여/etc/pki/ca-trust/source/anchors/
디렉토리로 이동합니다. 다음 '보다 낫다'를 실행해보세요.update-ca-trust
명령어를 입력합니다.
여기 https://serverfault.com/questions/394815/how-to-update-curl-ca-bundle-on-redhat에서 가져온 라이너가 하나 있습니다.
curl https://curl.se/ca/cacert.pem -o /etc/pki/ca-trust/source/anchors/curl-cacert-updated.pem && update-ca-trust
그러나 컬이 깨졌기 때문에 실제로 이 명령어를 사용하여 cacert.pem 파일을 다운로드합니다.
wget --no-check-certificate http://curl.haxx.se/ca/cacert.pem
" " " "update-ca-trust
할 수 .service httpd restart
또는 apache 는 apache의 service nginx restart
nginx 의 경우.
저는 이 문제에 대한 매우 간단한 해결책을 가지고 있습니다.이 작업은 인증서 파일 없이 수행할 수 있습니다.
이 솔루션은 클라이언트 서버 및 운영 서버가 아닌 로컬 시스템에 유효합니다.
Larabel 루트 폴더 -> 벤더 -> guzzlehttp -> guzle -> src로 이동합니다.
클라이언트를 엽니다.php
다음과 같은 $defaults Array를 찾습니다.
$defaults = [
'allow_redirects' => RedirectMiddleware::$defaultSettings,
'http_errors' => true,
'decode_content' => true,
'verify' => true,
'cookies' => false
];
이제 주요 작업은 verify key의 값을 변경하는 것입니다.
'verify' => false,
그 후 SSL 증명서에 CURL 요구가 체크되지 않습니다.이 솔루션은 나에게 효과적입니다.나는 많은 연구 끝에 이 해결책을 찾았다.
AppVeyor에서 앱을 만들 때도 같은 문제가 있었습니다.
- https://curl.haxx.se/ca/cacert.pem 다운로드 대상
c:\php
- openssl을 유효하게
echo extension=php_openssl.dll >> c:\php\php.ini
- 를 찾습니다.
echo curl.cainfo=c:\php\cacert.pem >> c:\php\php.ini
저는 이 문제에 대한 적절한 해결책을 가지고 있습니다.이 문제의 근본 원인을 파악해 봅시다.이 문제는 시스템의 인증서 저장소에 있는 루트 인증서를 사용하여 원격 서버 ssl을 확인할 수 없거나 원격 ssl이 체인 인증서와 함께 설치되지 않은 경우에 발생합니다.root ssh 액세스 권한을 가진 Linux 시스템이 있는 경우 다음 명령을 사용하여 증명서 저장소를 업데이트해 볼 수 있습니다.
update-ca-certificates
그래도 작동하지 않으면 인증서 저장소에 원격 서버의 루트 및 중간 인증서를 추가해야 합니다.루트 증명서와 중간 증명서를 다운로드하여 /usr/local/share/ca-certificates 디렉토리에 추가한 후 명령을 실행할 수 있습니다.이거면 될 거야.마찬가지로 윈도의 경우 루트 및 중간 인증서를 추가하는 방법을 검색할 수 있습니다.
이 문제를 해결할 수 있는 다른 방법은 원격 서버 팀에 도메인 루트 증명서, 중간 증명서 및 루트 증명서의 번들로 SSL 증명서를 추가하도록 요청하는 것입니다.
CA 번들이 시스템에서 삭제되어 CA 증명서에서 사용할 수 없게 된 경우에도 이 오류가 발생할 수 있습니다.
이는 푸시 알림에 사용되는 APNS용 Apple의 증명서에 서명하기 위해 사용되는 GeoTrust Global CA의 현재 상황입니다.
자세한 것은, 다음의 버그 리포트에서 확인할 수 있습니다.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=962596
Carlos Alberto Lopez Perez의 제안에 따라 GeoTrust 글로벌 CA 증명서를 수동으로 머신에 추가할 수 있습니다.
wget --no-check-certificate -c https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.pem \
&& mkdir /usr/local/share/ca-certificates/extra \
&& mv GeoTrust_Global_CA.pem /usr/local/share/ca-certificates/extra/GeoTrust_Global_CA.crt \
&& update-ca-certificates
위의 해결 방법이 모두 작동하지 않으면 XAMPP 설치를 최신 버전으로 업데이트해 보십시오.
저는 PHP 5.5.11에서 XAMPP를 실행하고 있었는데, 똑같은 코드가 동작하지 않았습니다.PHP 5.6.28에서 XAMPP로 업그레이드 했더니 위의 솔루션이 작동했습니다.
또한 PHP만 업데이트해도 해당 버전의 XAMPP에서 Apache와 php 설정을 조합한 것처럼 보이지 않습니다.
도움이 됐으면 좋겠는데
다음과 같은 오류가 발생하였습니다.
failed loading cafile stream: `C:\xamppPhp\apache\bin\curl-ca-bundle.crt`
나는 윈도우 머신을 사용하고 있다.그래서 저는 아래의 단계를 따랐습니다.
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.
누군가에게 도움이 되길 바란다
문제를 해결하기 위해 로컬에 2회선을 더 연결하기만 하면 됩니다.이것으로 저는 잘 되었습니다.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
guzzle은 다음과 같이 시험해 볼 수 있습니다.
$client = new Client(env('API_HOST'));
$client->setSslVerification(false);
Guzle/Guzle 3.*로 테스트 완료
언급URL : https://stackoverflow.com/questions/28858351/php-ssl-certificate-error-unable-to-get-local-issuer-certificate
'programing' 카테고리의 다른 글
mysql의 float(2,2)와 float()의 차이 (0) | 2022.10.08 |
---|---|
Python에서는 여러 컨스트럭터를 정의할 수 없습니까? (0) | 2022.10.08 |
콤마가 있는 문자열을 배열로 변환 (0) | 2022.10.08 |
Java: 와의 차이점은 무엇입니까? (0) | 2022.10.08 |
유닛 테스트를 위해 개인 방법을 공개하는 것... 좋은 생각? (0) | 2022.10.08 |