HTTPS 및 SSL3_GET_SERVER_CERTIFICATE: 증명서 검증 실패, CA는 정상
개발에 XAMPP를 사용하고 있습니다.최근 xampp 설치를 이전 버전에서 1.7.3으로 업그레이드했습니다.
HTTPS 지원 사이트를 컬링하면 다음과 같은 예외가 발생합니다.
치명적인 오류:예외 'RequestCore_Exception'과(와) 'cURL 리소스:리소스 ID #55; cURL 오류: SSL 인증서 문제. CA 인증서가 정상인지 확인하십시오.상세: 오류: 14090086: SSL 루틴:SSL3_GET_SERVER_CERTIFICATE:증명서 검증 실패(60)'
누구나 이 문제를 해결하기 위해 PHP 코드의 특정 컬 옵션을 사용할 것을 제안합니다.이렇게 하면 안 될 것 같아요.이전 버전의 XAMPP에는 문제가 없었고, 새로운 버전을 설치한 후에야 문제가 발생했기 때문입니다.
이 문제를 해결할 수 있는 PHP 설치, Apache 등의 설정 변경을 알아내기 위해 도움이 필요합니다.
【윈도우즈】요.cacert.pem로로 합니다.curl.cainfo.
PHP 5.3.7에서는 다음을 수행할 수 있습니다.
- https://curl.se/ca/cacert.pem을 다운로드하여 어딘가에 저장합니다.
php.inicurl. " -- add curl.curlfo = "PATH_TO/cacert.pem"
그렇지 않으면 모든 cURL 리소스에 대해 다음 작업을 수행해야 합니다.
curl_setopt ($ch, CURLOPT_CAINFO, "PATH_TO/cacert.pem");
curl는 승인된 CA 목록을 포함하지만 7.18.1 이후로는 CA 증명서를 번들하지 않습니다.따라서 기본적으로는 모든 TLS/SSL 인증서가 검증 불가로 거부됩니다.
CA의 루트 증명서를 취득하고 포인트 컬을 해야 합니다.TLS/SSL 인증서 확인에 대한 자세한 내용은 curl의 세부 정보를 참조하십시오.
경고: 이로 인해 SSL이 보호하도록 설계된 보안 문제가 발생하여 코드베이스 전체가 안전하지 않을 수 있습니다.그것은 모든 권장 관행에 위배된다.
하지만 제게 효과가 있었던 정말 간단한 해결책은 다음과 같습니다.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
호출 전:
curl_exec():
php 파일에 있습니다.
이것으로 SSL 증명서의 모든 검증이 무효가 된다고 생각합니다.
출처 : http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
#Curl: SSL 증명서 문제.CA 증명서가 OK ###07 April 2006 ########인지 확인합니다.
Curl을 사용하여 보안 URL을 열면 다음 오류가 발생할 수 있습니다.
SSL 인증서 문제. CA 인증서가 정상인지 확인합니다.
에러의 원인과 대처 방법을 설명하겠습니다.
오류를 제거하는 가장 쉬운 방법은 스크립트에 다음 두 줄을 추가하는 것입니다.이 솔루션은 보안상의 위험을 초래합니다.
//WARNING: this would prevent curl from detecting a 'man in the middle' attack curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);이 두 개의 파라미터가 어떻게 기능하는지 봅시다.매뉴얼 인용.
CURLOPT_SSL_VERIFY HOST: 1 - SSL 피어 증명서에 공통 이름이 있는지 확인합니다.2: 공통 이름의 존재 및 지정된 호스트 이름과 일치하는지 확인합니다.
CURLOPT_SSL_VERIFYPEER: 피어 증명서 확인을 중지하려면 FALSE를 선택합니다.확인할 대체 증명서는 CURLOPT_CAINFO 옵션으로 지정하거나 CURLOPT_CAPATH 옵션으로 증명서 디렉토리를 지정할 수 있습니다.CURLOPT_SSL_VERIFYPEER가 비활성화되어 있는 경우(기본값은 2), CURLOPT_SSL_VERIFYHOST도 TRUE 또는 FALSE여야 합니다.CURLOPT_SSL_VERIFYHOST를 2(기본값)로 설정하면 리모트리소스에 액세스하기 위해 사용하고 있는 URN과 일치하는 증명서가 제시되고 있는 것이 보증됩니다.이것은 정상적인 체크이지만 프로그램이 인식되지 않는다는 보장은 없습니다.
###'가운데 남자'를 입력합니다.##
프로그램이 다른 서버와 대화하도록 잘못 인도될 수 있습니다.이것은, dns 나 arp poisoning 등, 몇개의 메카니즘에 의해서 실현될 수 있습니다(이것은 다른 날의 이야기입니다).침입자는 프로그램에서 기대하는 것과 동일한 'comon name'으로 인증서를 자체 서명할 수도 있습니다.통신은 여전히 암호화되어 있지만, 당신은 당신의 비밀을 사기꾼에게 누설할 것입니다.이런 종류의 공격을 '중간자'라고 부른다.
###'중간자'를 물리치고 ###
글쎄요, 저희에게 제시되고 있는 증명서가 실제로 유효한지 확인해야 합니다.델은 이를 합리적으로* 신뢰할 수 있는 증명서와 비교함으로써 실현합니다.
리모트 리소스가 Verisign, GeoTrust 등의 주요 CA에서 발급된 증명서에 의해 보호되고 있는 경우 http://curl.se/docs/caextract.html에서 입수할 수 있는 Mozilla의 CA 증명서 번들과 안전하게 비교할 수 있습니다.
" " " " "
cacert.pem스크립트에 다음 옵션을 설정합니다.curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");
위의 모든 정보에 대한 크레딧은 http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html로 이동합니다.
를 사용하는 WampServer 설정을 수 .curl.cainfo입니다.php.ini동작하지 않습니다.
에는 2개의 WampServer 2가 .php.ini 삭제:
C:\wamp\bin\apache\Apachex.x.x\bin
C:\wamp\bin\php\phpx.x.xx
웹 브라우저를될 때 되는 것으로 두 명령어를 될 때 됩니다.shell_exec().
TL;DR
사용하는 WampServer를 .curl.cainfo양쪽에 연결되다 php.inifiles.complete files files files files files files files files.
모든 성스러운 사랑을 위하여...
,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.openssl.cafilePEM의 PHP의 PEM.
이 많이 합니다.curl.cainfoPHP 구성에서는 필요한 것이 바로 이것입니다만, 제가 작업하고 있는 환경에서는, eboraas/laravel docker 컨테이너로, Debian 8(jessie)과 PHP 5.6을 사용하고 있기 때문에, 그 변수를 설정해도 효과가 없습니다.
php -i에서는, 그 , 「」에 대해서는 이 기재되어 .openssl 둘 다 요.openssl.capath ★★★★★★★★★★★★★★★★★」openssl.cafile옵션이지만, 두 번째 설정만으로 PHP 경유로 컬이 가능해져, 최종적으로 HTTPS URL에서는 문제가 없습니다.
문의하는 어플리케이션에 자기서명증명서가 있는 경우 http://curl.haxx.se/ca/cacert.pem의 일반 cacert.pem으로 문제가 해결되지 않을 수 있습니다.
서비스 엔드포인트 URL이 확실한 경우 브라우저를 통해 입력하고 인증서를 "X 509 certificate with chain(PEM)" 형식으로 수동으로 저장합니다.이 증명서 파일의 포인트는
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/{downloaded certificate chain file}");
amazon AMI linux에서도 동일한 오류가 발생합니다.
/etc/php.d/curl.ini에 curl.cainfo를 설정하여 해결했습니다.
https://gist.github.com/reinaldomendes/97fb2ce8a606ec813c4b
추가 2018년 10월
Amazon Linux v1에서 이 파일 편집
vi /etc/php.d/20-curl.ini
이 행을 추가하려면
curl.cainfo="/etc/ssl/certs/ca-bundle.crt"
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을 사용하여 검색하면 두 curl 참조를 모두 한 영역에서 찾을 수 있습니다.)
저는 GuzzleHttp(Mac에서는 http+http)에게 www.googleapis.com에서 페이지를 가져오려고 할 때 여기에 오게 되었습니다.
여기 누구에게도 도움이 될 수 있는 마지막 해결책이 있다.
이 에러의 원인이 되고 있는 도메인의 증명서 체인을 확인합니다.저는 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
기본적으로 이 파일 끝에 올바른 증명서 "서명"을 추가해야 합니다.
이 중 일부는 여기에서 찾을 수 있습니다.필요한 경우 체인 내의 다른 사용자를 검색/검색해야 할 수 있습니다.
다음과 같습니다.
(주의: 이것은 이미지이므로 단순히 stackoverflow에서 증명서를 복사/붙여넣는 일은 없습니다.)
이 파일에 올바른 인증서가 있으면 apache를 다시 시작하고 테스트합니다.
재인스톨을 시도할 수 있습니다.ca-certificates패키지화 또는 여기에 설명된 대로 문제의 증명서를 명시적으로 허용합니다.
해결책은 매우 간단합니다!앞에 이 줄을 놓으십시오.curl_exec:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
나한텐 효과가 있어.
언급URL : https://stackoverflow.com/questions/6400300/https-and-ssl3-get-server-certificatecertificate-verify-failed-ca-is-ok
'programing' 카테고리의 다른 글
| 인터페이스가 다른 인터페이스를 구현할 수 없는 이유는 무엇입니까? (0) | 2022.12.10 |
|---|---|
| Mysql 직원 휴식 시간 기록(시간 차이 있음 (0) | 2022.12.10 |
| OSX를 Yosemite 또는 El Capitan으로 업그레이드할 때 MySQL이 시작되지 않음 (0) | 2022.12.10 |
| 어레이 내의 모든 문자열을 트리밍하려면 어떻게 해야 합니까? (0) | 2022.11.30 |
| Java에서의 클론 가능 기능 및 사용 방법 (0) | 2022.11.30 |
