2013-02-18 3 views
4

안녕하세요 동료 프로그래머PHP 컬의 SSL 오류

https 연결로 API를 만들고 있습니다. 인증서 확인으로 API 호출을 보호하려고합니다. 지금은 컬에서 cacert.pem을 다운로드하여 내 폴더에이를 배치했지만 작동 날이 오류를 제공하지 않습니다했습니다

SSL certificate problem: unable to get local issuer certificate 

그럼 나는 cacert.pem 파일이 정말 확신 정확하게 위치하지만 너희들을 위해 내가 쓰고 한 일부 코드는 작동 얻을 :

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST  ,1); 
curl_setopt($ch, CURLOPT_USERPWD, $this->api_key . ":" . $this->api_secret); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . "/cacert.pem"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_POSTFIELDS ,$post_vars); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,0); 
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept: application/json')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); // RETURN THE CONTENTS OF THE CALL 
$data = curl_exec($ch); 

내가 너희들 중 일부는 내 질문에 대한 대답을 당신에게 희망을 정말 SSL 연결에 대해 잘 모르기 때문에 .

미리 감사드립니다.

+0

어디에서 cacert.pem을 다운로드 했습니까? –

+0

http://curl.haxx.se/ca/에는 번들이 있습니다. 절대 경로 : http://curl.haxx.se/ca/cacert.pem –

+0

이것은 작동합니다; 파일을 읽을 수 있습니까? –

답변

2

실행중인 스크립트에서 인증서 번들을 읽을 수있게 한 다음에는 서버 자체를 조사해야합니다.

자신의 서버 인 경우 발행 된 인증서와 번들과 함께 제공되는 인증 기관 중 하나 사이에 중간 인증서를 설치하는 것을 잊어 버린 것 같습니다.

자체 서명 된 인증서로 작업하는 경우 cacert.pem에 연결하려는 서버의 공개 인증서가 있어야합니다. 이 인증서는 here에 설명 된 개인 인증서 (.crt 파일)에서 생성 할 수 있습니다.

+0

자습서의 6 단계에 있습니다. 그러나 가상 호스트 파일을 찾을 수 없습니까?이 파일이 기본적으로 어디에 있는지 알고 있습니까? –

+0

@PaulOostenrijk Apache를 가정 할 때 모든 파일이 ''블록입니다. –

+0

가상 메일을 확인할 것입니다. 내 호스팅 회사에서 파일을 st. 나는 그것을 지금 찾을 수 없다. 당신은 업데이트를 얻을 것이다! –