2017-01-30 87 views
1

在PHP7.0時做出的fsockopen忽略證書,使用fsockopen連接打開HTTPS連接時(在同一 主機託管),使用主機名狀tls://foo.localhost,我得到一個錯誤, 看起來像如何使用TLS

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

連接未打開。

相同的代碼在PHP 5.5中工作(這是不太嚴格的檢查點)。我做的 並不真正關心驗證證書(這個代碼在單元測試中運行,而 集成套件只連接到本地主機)。儘管如此,測試需要依照 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); 
相關問題