TLS

2017-01-30 3 views
1
PHP7.0에서

를 사용하는 경우 인증서를 무시할 수는 fsockopen 만드는 방법, tls://foo.localhost 같은 호스트 이름을 사용하여, (같은 호스트에서 호스팅), 나는 오류 을 그 무엇입니까 모양은TLS

fsockopen(): Peer certificate CN="bar" did not match expected CN="foo.localhost" 

연결이 열리지 않습니다.

같은 코드가 PHP 5.5에서 작동했습니다 (덜 엄격한 검사 기준). 나는 인증서를 확인하는 데 신경 쓰지 않습니다 (이 코드는 단위 테스트에서 실행되며 통합 제품군, localhost에만 연결). 테스트를 http 및 https와 비교하여 실행해야합니다.

file_get_contents을 사용할 때 이러한 체크를 비활성화하는 방법을 알고 있습니다.

fsockopen을 사용할 때 어떻게 피어 인증서 확인을 비활성화 할 수 있습니까?

+0

은'verify_peer' [상황에 맞는 옵션]을 하는가를 소켓을 여는

예 (http://php.net/manual/en/context.ssl.php)이 영향을 줍니까? –

+0

@ ÁlvaroGonzález, 'fsockopen'에 컨텍스트를 전달하는 방법을 모르겠습니다. – juanleon

+0

소켓으로 작업 한 적이 없으므로 [stream_context_set_default()] (http://php.net/)가 작동한다고 가정합니다. 그렇지 않으면 [fsockopen()] (http://php.net/fsockopen) 매뉴얼 페이지에 제안 된 기능을 시도하십시오. "[stream_socket_client()] 함수 (http://php.net/manual/en /function.stream-socket-client.php)는 비슷하지만 논 블로킹 연결과 스트림 컨텍스트를 제공하는 기능을 포함하여 더 다양한 옵션을 제공합니다. " –

답변

3

fsockopen은 피어 인증서 오류를 무시하는 방법을 제공하지 않습니다.

stream_socket_clientcontext을 사용해야합니다. 사용 가능한 ssl/tls 컨텍스트 옵션은 here입니다. 피어 검증없이

$context = stream_context_create([ 
    'ssl' => [ 
     'verify_peer' => false 
    ] 
]); 

$hostname = "tls://foo.localhost"; 
$socket = stream_socket_client($hostname, $errno, $errstr, ini_get("default_socket_timeout"), STREAM_CLIENT_CONNECT, $context);