2012-11-20 5 views
4

Google 사이트가 최근 http에서 https로 변경되었습니다. (작업)SSL 용 cURL 구성

컬을 SSL하기 전에 : 지금은 작동하지 않는 고객에 의해 호출 REST API 호출을 가지고

$ch = curl_init(); 

curl_setopt($ch,CURLOPT_URL,$api_call_url); 
curl_setopt($ch,CURLOPT_POST,1); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_fields); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($ch); 

curl_close($ch); 

컬 SSL (작동하지 않는) 후 :

$ch = curl_init(); 

curl_setopt($ch,CURLOPT_URL,$api_call_url); 
curl_setopt($ch,CURLOPT_POST,1); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_fields); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, "/customers_path_on_their_server/to/our_cacert_they_exported_via_firefox.crt"); //X.509 Certificate 

$result = curl_exec($ch); 

curl_close($ch); 

해야합니까 클라이언트에게 CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST, CURLOPT_CAINFO를 REST 통합 코드에 추가하도록 요청하는 것 외에는 서버에서 아무 것도 설정하지 않아도됩니까?

난 정말 HTTPS에서 초보자 그리고 난 정확히 내가 검색해야하는 용어입니다 모르겠어요, BTW, 우리의 사이트를 호스팅 아마존 EC2를 사용하고 있습니다 ... 이미 시간

컬 SSL을 검색

error:SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

컬 버전 : 7.21.6

정보가 중요한 경우 ... 여기

는 반환 컬 오류입니다

SSL 버전 : OpenSSL을/1.0.0e

+1

http://stackoverflow.com/questions/6400300/php-curl-https -causing-exception-ssl-certificate-problem-verify-the-ca-cer – nkamm

+0

@nkamm 여전히 작동하지 않습니다. 고객의 서버에 저장된 Firefox에서 내 보낸 .crt 파일이 서버의 .crt 파일과 같은지 확인했습니다. 그들은 동일합니다. 우리 서버의 .crt 파일은 /etc/apache2/ssl/our_site.crt에 있습니다. 내가 다른 곳으로 옮겨야한다고 생각하니?나는 이미 5 시간 이상 이것을 알아 냈습니다. 오하이오 ... – Woppi

+0

또한 select (firefox에서)에서 2 번째 옵션을 사용하여 인증서를 보내달라고 요청합니다. http://i.stack.imgur.com/ kZpCQ.png – nkamm

답변

0

당신은 CURLOPT_SSL_VERIFYPEER 및 CURLOPT_SSL_VERIFYHOST이 faslse을 설정해야 또는 0

curl_setopt ($ ch를, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, FALSE); 다른 사람들이 종종 제안으로 피어 호스트 검증을 끄지 마십시오 칼

+2

이것은 안전하지 않습니다. 이러지 마. –

+0

이 옵션 중 하나를 false로 설정하면 보안 데이터 전송에 SSL (https)을 사용하는 목적을 완전히 무시합니다. 피어 또는 호스트를 확인되지 않은 상태로두면 Man In The Middle 공격에 대한 보호 기능을 제거하는 모든 서버가 될 수 있습니다. 이는 SSL을 전혀 사용하지 않는 것과 마찬가지로 안전하지 않다는 것을 의미합니다. – BazzyTK

5

: '// ... HTTPS'

확실 유해야 끄트머리

는에 CURLOPT_URL을 설정합니다.
이것은 실제 문제에 대한 빠르고 불안한 해결 방법입니다. 이러한 기능은 정당한 이유가 있습니다. 따라서 제 3자를 통해 연결하려는 시스템이 예상 한 것임을 신뢰할 수 있습니다.

먼저 OS에 인증서 디렉토리가 있는지 찾아보십시오. 인증 기관이 종종 포함됩니다. 예를 들어 우분투에서는 종종 /etc/ssl/certs입니다. 이 디렉토리가 존재하는 경우, CA 경로 매개 변수를 설정 :

curl_setopt($ch, CURLOPT_CAPATH, '/etc/ssl/certs'); 

은 또는 당신은 하나의 CA 인증서 파일을 참조 할 수 있습니다. cacert.pem 파일을 프로젝트에 포함 시키거나 서버에 설치하십시오. 신뢰할 수있는 출처에서 다운로드하십시오 (예 : cacert.org.

curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem'); 

를 그리고 인증을 설정 : 단일 파일 대신 capath에를 설정하지 않는 경우에만 CAINFO을 설정

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
+0

verifyhost의 올바른 값은 1이 아닌 2입니다 (http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html). 그러나 피어 및 호스트 확인은 기본적으로 제공되므로 제공 할 필요가 없습니다. – hadley