2012-06-05 1 views
1

원래 CURLOPT_SSL_VERIFYPEER로 실행되는 2 대의 서버 사이에 오류가 발생하지 않도록 SSL 인증서에 일반 이름이없는 "false"로 설정된 두 서버 간의 연결이있었습니다. 나는 최근 (true로 설정)이 코드를 변경하고 PEM 형식의 컴퓨터 인증서를 지정, 그러나cURL PHP 자체 서명 된 인증서를 사용하는 개인 서버 사이의 적절한 SSL

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); 
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2); 

: 다음은 인증서를 사용하여 서버에 연결된 클라이언트 코드입니다.

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); 
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2); 
curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/includes/hostcert/Hostname.crt'); 

인증서는 CN의 호스트 이름으로 서명되므로 테스트 시스템의 로컬 네트워크에서 잘 작동합니다. 호스트 코드를 신뢰하고 보안 연결을 유지하도록 PHP 코드를 어떻게 설정할 수 있습니까?

내가 방금 CURLOPT_SSL_VERIFYHOST을 설정할 수 있습니다 잘 알고 있어요 "0"또는 "1"과 CURLOPT_SSL_VERIFYPEER "false"로,하지만 그들은 SSL 보안을 깰 이러한 유효한 해결책이 아니다.

#<ip-address> <hostname.domain.org> <hostname> 
127.0.0.1  localhost.localdomain localhost ExampleHostName 
::1    localhost.localdomain localhost 

답변

2

당신은 클라이언트의 요청에 따라 유효한 호스트 이름, 와 인증서를 생성해야합니다 다음과 같이

내/etc/hosts 파일입니다. 내부 이름으로 machine.local을 사용했지만 machine.example.org을 통해 외부 클라이언트를 호출하려는 경우 machine.example.org에 유효한 인증서가 필요합니다.

둘 다 필요하면 (동일한 시스템이 다른 호스트 이름으로 호출 될 수 있기 때문에) 주체 대체 이름 확장자를 사용하고 인증서에 여러 개의 DNS 항목을 넣으십시오.

+0

그래서이 컴퓨터의 DNS A 레코드를 실제로 설정해야합니까? ArchLinux를 실행 중이고 "hosts"파일을 표시하기 위해 내 질문을 편집했습니다. 어떻게 수정해야합니까? 감사합니다. – PolishHurricane

+0

DNS 레코드 또는 호스트 파일은 올바른 IP 주소로 확인되는 한 실제로 중요하지 않습니다. 중요한 것은 클라이언트가 사용하는 URL입니다. 인증서는이 URL의 호스트 이름에 유효해야합니다. – Bruno

+0

밝혀졌습니다. 호스트 파일을 만질 필요조차 없었습니다. SSL 3을 강제해야했습니다. – PolishHurricane

관련 문제