2011-10-04 5 views
3

클라이언트 역할을 수행하고 https에서 일부 웹 서비스를 사용하는 PHP를 작성해야합니다. 내 문제는 또한 서버 인증서를 확인하기를 원합니다. 올바른 서버가 있고 서버 역할을하는 중간 서버가 없다는 것을 알아야합니다. 누군가 나를 도와 드릴까요?https 인증서를 확인하는 PHP 클라이언트

감사합니다.

+0

걸릴 단계는 좋지만 중간자 공격을 확인하는 것은 유용하지 않습니다. Google "Diginotar"를 통해 전체 SSL CA 시스템이 근본적으로 왜 고장 났는지 확인하십시오. –

+3

@Marc B : 근본적인 의미에서 일치하지는 않지만 신뢰할 수있는 CA 목록을 가능한 한 짧게 유지하는 데 신경 쓰면 많은 문제를 피할 수 있습니다. 예를 들어, 이와 같은 경우에는 연결할 사이트에서 사용하는 특정 CA 이외의 다른 CA를 신뢰 할 필요가 없습니다. –

답변

6

컬 확장자가있는 경우 연결시 인증서를 확인하도록 구성 할 수 있습니다.

http://php.net/manual/en/function.curl-setopt.php

// As of writing this, Twitter uses Verisign, Google uses Eqifax 
$exampleUrl = 'https://twitter.com/'; // Success 
$exampleUrl = 'https://google.com/'; // Fails 

// create a new CURL resource 
$ch = curl_init($exampleUrl); 

// enable verification 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 

// list of CAs to trust 
// If the remote site has a specific CA, they usually have a .crt 
// file on their site you can download. Or you can export key items from 
// some browsers. 
// In this example, using: Verisign [1] 
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/ca_bundle.crt'); 
// - or - 
curl_setopt($ch, CURLOPT_CAPATH, __DIR__ . '/ca_certs/); 

// If the remote site uses basic auth: 
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password); 

// And a helpful option to enable while debugging 
//curl_setopt($ch, CURLOPT_VERBOSE, true); 

// defaults to stdout, don't want that for this case. 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$page = curl_exec($ch); 

[1] http://www.verisign.com/support/verisign-intermediate-ca/extended-validation/apache/ 컬 7.10의 등이 지금 기본적으로 선택 될 모든 세트입니다처럼 보이는

+0

감사! 바보 같은 질문에 대해 유감스럽게 생각합니다. 하지만 URL을 테스트하거나 웹 서비스 클라이언트로 사용할 수있는 방법을 알지 못합니다. 난 정말 PHP에 새로운입니다. :) –

+0

서버가 ca_bundle.crt에있는 CA 중 하나가 서명 한 유효한 인증서를 제공하지 않으면 연결이 실패합니다. – rrehbein

+0

도움을 주셔서 감사합니다! 그러나 여전히 첫 번째와 두 번째 호출 모두 경고를 발행하지 않습니다. 내가 'var_dump ($ page)'할 때 부울을 false로 만듭니다. 제발 도와주세요 ... :) 그리고 그 후에 어떻게 서버 기능을 호출 할 수 있습니까? (예 : 비누 클라이언트 같습니까?) –

0

:
http://php.net/manual/en/function.curl-setopt.php


CURLOPT_SSL_VERIFYPEER

cURL이 피어 인증서를 확인하는 것을 중지하려면 FALSE를 지정하십시오. 검증 할 대체 인증서는 CURLOPT_CAINFO 옵션으로 지정하거나 인증서 디렉토리를 CURLOPT_CAPATH 옵션으로 지정할 수 있습니다.

기본적으로 cURL 7.10부터 TRUE입니다. cURL 7.10부터 기본 번들이 설치되었습니다.


CURLOPT_SSL_VERIFYHOST

1은 SSL 피어 인증서의 일반 이름의 존재를 확인합니다. 2를 사용하여 공통 이름의 존재를 확인하고 제공된 호스트 이름과 일치하는지 확인하십시오. 프로덕션 환경에서는이 옵션의 값을 2 (기본값)로 유지해야합니다.

관련 문제