찾다
백엔드 개발PHP 튜토리얼Windows에서 PHP Curl HTTPS 인증 기관 문제를 해결하는 방법

성공적인 HTTPS 요청에는 HTTP 클라이언트가 알려지고 신뢰할 수 있는 루트 목록에 대한 서버 제공 TLS 인증서 인증서. PHP Curl 확장도 다르지 않습니다. 컬 확장 프로그램은 libcurl을 사용하여 HTTPS 요청을 하고 libcurl은 OpenSSL과 같은 TLS 라이브러리를 사용하여 요청을 검증합니다.

Windows에서 PHP Curl HTTPS 인증 기관 문제를 해결하는 방법

Curl 확장 프로그램에는 다음을 포함하는 유효한 파일이 필요합니다. 모두 HTTPS 검증을 완료하기 위한 신뢰할 수 있는 루트 인증서 및 PHP 이를 php.ini 파일의 지시문으로 노출합니다.

Linux, BSD 및 macOS에서 libcurl은 기본적으로 시스템 루트를 사용할 수 있습니다. 인증서가 있지만 Windows에서는 불가능합니다. 모든 시스템 루트를 포함하는 단일 파일이 제공되지 않음 인증서.

이 문서에서는 Curl 확장을 사용하여 HTTPS 요청을 성공적으로 수행하기 위한 두 가지 가능한 접근 방식과 HTTPS 요청을 안전하지 않게 만들 수 있는 하지 말아야 할 작업에 대해 설명합니다.

실패하는 이유

$ch = curl_init('https://php.watch');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_exec($ch); // false  

curl_error($ch);
// SSL certificate problem: unable to get local issuer certificate

curl_exec 호출이 잘못된 응답으로 실패하고, cur_error가 SSL 인증서 문제: 로컬 발급자 인증서를 가져올 수 없음 오류를 나타내는 경우 이는 Curl을 의미합니다. 루트 인증서가 포함된 파일이 제공되지 않았거나 파일을 찾을 수 없었습니다.

이 오류는 Linux, BSD 및 macOS 시스템에서는 흔하지 않지만 상당히 Windows에서는 루트를 얻기 위해 지정된 파일이 없기 때문에 일반적입니다. 인증서이며 PHP는 루트 인증서 목록을 제공하지 않습니다.

해결책은 최신 루트가 포함된 파일을 제공하는 것입니다. 또는 이상적으로는 Curl이 기본 루트 저장소를 구문 분석하도록 합니다. 기본 운영 체제가 제공합니다.

기본 인증 기관 사용

Curl 7.71 이상에서는 Curl 설정이 가능합니다. Curl에 기본(시스템) 루트 인증서를 사용하도록 요청하는 옵션입니다. 이는 Curl이 시스템 루트 인증서를 구문 분석하는 Windows에서도 작동합니다.

CURLOPT_SSL_OPTIONS 옵션이 CURLSSLOPT_NATIVE_CA로 설정된 경우 또는 해당 비트가 포함된 비트마스크인 경우 Curl은 기본 비트를 사용하려고 시도합니다. 기능 및 버전에 따라 루트 인증서 저장소 기본 TLS 라이브러리.

Curl 확장이 Curl 7.71 이상 및 PHP 8.2 이상으로 빌드된 경우 권장되는 수정 사항입니다.

 $ch = curl_init('https://php.watch');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
    curl_exec($ch);

위 스니펫은 컬 버전과 PHP 버전이며 PHP와 Curl 버전 요구 사항이 모두 충족된다고 가정합니다. 그만큼 다음은 Curl 옵션을 조건부로 추가하는 방법을 보여주는 예입니다.

$ch = curl_init('https://php.watch');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
if (defined('CURLSSLOPT_NATIVE_CA')  
  && version_compare(curl_version()['version'], '7.71', '>=')) {  
    curl_setopt($ch, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
}  
curl_exec($ch);

cacert.pem 파일 다운로드 및 유지 관리

PHP 8.2 이전 버전에서 실행되는 애플리케이션의 경우(여기서 CURLSSLOPT_NATIVE_CA 상수를 사용할 수 없음) 또는 Curl 버전이 7.71보다 오래된 경우 권장되는 대체 솔루션은 Curl 호환 파일을 다운로드하는 것입니다. 루트 인증서 파일을 선택하고 이를 사용하도록 PHP 또는 Curl 요청을 구성하세요.

Curl 프로젝트는 최신 인증서 목록을 유지 관리합니다. Mozilla에서 추출한 CA 인증서를 확인하세요.

  1. cacert.pem 파일을 다운로드하세요

  2. 파일을 PHP와 웹 서버에서 액세스할 수 있는 디렉터리로 이동하세요. 예를 들어 C:/php/cacert.pem.
  3. php.ini 파일을 편집하고 cacert.pem 파일의 절대 경로를 가리키도록 컬.cainfo 항목을 수정합니다.

  4. $ch = curl_init('https://php.watch');  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    curl_exec($ch); // false  
    
    curl_error($ch);
    // SSL certificate problem: unable to get local issuer certificate
  5. 선택적으로 웹 서버(예: Apache)를 다시 시작하여 INI 파일을 다시 로드합니다.

이 접근 방식의 단점은 cacert.pem 파일을 정기적으로 업데이트해야 한다는 것입니다. cacert.pem 예를 들어 Curl 프로젝트에서 제공하는 파일은 루트에서 추출됩니다. Mozilla가 관리하는 저장소입니다. 평균적으로 이 목록과 파일은 1년에 4~5번 업데이트됩니다. 최신 루트와의 호환성을 보장하려면 인증서 목록을 보려면 이 파일의 로컬 복사본을 업데이트하세요. 정기적으로

INI 파일을 수정할 수 없는 경우 Curl 요청 내에서 cacert.pem 파일의 절대 경로도 지정하세요.

 $ch = curl_init('https://php.watch');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
    curl_exec($ch);

PHP 8.2, Curl 7.77 사용 , CURLOPT_CAINFO_BLOB 옵션을 사용하면 cacert.pem 내용을 포함하는 문자열이 가능합니다.

위 내용은 Windows에서 PHP Curl HTTPS 인증 기관 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 php.watch에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
unset ()와 session_destroy ()의 차이점은 무엇입니까?unset ()와 session_destroy ()의 차이점은 무엇입니까?May 04, 2025 am 12:19 AM

thedifferencebetweenUnset () andsession_destroy () istssection_destroy () thinatesTheentiresession.1) TEREMOVECIFICESSESSION 'STERSESSIVEBLESSESSIVESTIETSTESTERSALLS'SSOVERSOLLS '를 사용하는 것들

로드 밸런싱의 맥락에서 스티커 세션 (세션 친화력)이란 무엇입니까?로드 밸런싱의 맥락에서 스티커 세션 (세션 친화력)이란 무엇입니까?May 04, 2025 am 12:16 AM

stickysessionsureSureSureRequestSaroutEdToTheSERSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESINCENSENCY

PHP에서 사용할 수있는 다른 세션 저장 핸들러는 무엇입니까?PHP에서 사용할 수있는 다른 세션 저장 핸들러는 무엇입니까?May 04, 2025 am 12:14 AM

phpoffersvarioussessionsaveAndlers : 1) 파일 : 기본, 단순, 단순한 BUTMAYBOTTLENECKONHIGH-TRAFFICSITES.2) MEMCACHED : 고성능, IdealForspeed-CriticalApplications.3) Redis : SimilartomemCached, WithaddedPersistence.4) 데이터베일 : OffforIntegrati

PHP의 세션은 무엇이며 왜 사용됩니까?PHP의 세션은 무엇이며 왜 사용됩니까?May 04, 2025 am 12:12 AM

PHP의 세션은 여러 요청간에 상태를 유지하기 위해 서버 측의 사용자 데이터를 저장하는 메커니즘입니다. 구체적으로, 1) 세션은 session_start () 함수에 의해 시작되며 데이터는 $ _session Super Global Array를 통해 저장되어 읽습니다. 2) 세션 데이터는 기본적으로 서버의 임시 파일에 저장되지만 데이터베이스 또는 메모리 스토리지를 통해 최적화 할 수 있습니다. 3) 세션은 사용자 로그인 상태 추적 및 쇼핑 카트 관리 기능을 실현하는 데 사용될 수 있습니다. 4) 세션의 보안 전송 및 성능 최적화에주의를 기울여 애플리케이션의 보안 및 효율성을 보장하십시오.

PHP 세션의 수명주기를 설명하십시오.PHP 세션의 수명주기를 설명하십시오.May 04, 2025 am 12:04 AM

phpsessionsStartWithSession_start (), whithesauniqueIdAndCreatesErverFile; thepersistacrossRequestSandCanBemanBledentSandwithSession_destroy ()

절대 세션 타임 아웃의 차이점은 무엇입니까?절대 세션 타임 아웃의 차이점은 무엇입니까?May 03, 2025 am 12:21 AM

절대 세션 시간 초과는 세션 생성시 시작되며, 유휴 세션 시간 초과는 사용자가 작동하지 않아 시작합니다. 절대 세션 타임 아웃은 금융 응용 프로그램과 같은 세션 수명주기의 엄격한 제어가 필요한 시나리오에 적합합니다. 유휴 세션 타임 아웃은 사용자가 소셜 미디어와 같이 오랫동안 세션을 활성화하려는 응용 프로그램에 적합합니다.

세션이 서버에서 작동하지 않으면 어떤 조치를 취 하시겠습니까?세션이 서버에서 작동하지 않으면 어떤 조치를 취 하시겠습니까?May 03, 2025 am 12:19 AM

서버 세션 고장은 다음 단계를 따라 해결할 수 있습니다. 1. 서버 구성을 확인하여 세션이 올바르게 설정되었는지 확인하십시오. 2. 클라이언트 쿠키를 확인하고 브라우저가 지원하는지 확인하고 올바르게 보내십시오. 3. Redis와 같은 세션 스토리지 서비스가 정상적으로 작동하는지 확인하십시오. 4. 올바른 세션 로직을 보장하기 위해 응용 프로그램 코드를 검토하십시오. 이러한 단계를 통해 대화 문제를 효과적으로 진단하고 수리 할 수 ​​있으며 사용자 경험을 향상시킬 수 있습니다.

session_start () 함수의 중요성은 무엇입니까?session_start () 함수의 중요성은 무엇입니까?May 03, 2025 am 12:18 AM

session_start () iscrucialinphpformanagingUsersessions.1) itiniteSanewsessionifnoneexists, 2) ResumesAnxistessions, and3) setSasessionCookieForContInuityAcrosrequests, enablingplicationsirecationSerauthenticationAndpersonalizestContent.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.