2016-08-12 313 views
1

我已經安裝了WAMP 3.0.4,並且正在嘗試編寫連接到外部HTTPS Web服務的PHP腳本。但是,這將返回錯誤:file_get_contents():SSL操作失敗,代碼爲1(證書驗證失敗)

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我寫了證明的問題很短的腳本:

<?php 
$auth = base64_encode('username:password'); 

$aContext = array(
    'http' => array(
     'proxy' => 'tcp://proxyip:proxyport', 
     'request_fulluri' => true, 
     'header' => 'Proxy-Authorization: Basic $auth' 
    ), 
    'SSL' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true, 
     'cafile' => 'C:/wamp/certificates/cacert.pem' 
    ) 
); 
$cxContext = stream_context_create($aContext); 

$sFile = file_get_contents("https://www.google.com", False, $cxContext); 

echo $sFile; 
?> 

它是使用代理服務器的要求。

可以看出,我已經嘗試安裝根證書包,並且還將verify_peer添加到false(不是我會在生產中這樣做),但仍然收到此錯誤。

從上面可以清楚地看出,我是Apache/WAMP新手。有人可能可以解釋我失蹤了嗎?

回答

3

如果你想禁用 SSL連接的驗證,你可以使用:

'verify_peer' => false 

而且你的代碼中:

<?php 
$auth = base64_encode('username:password'); 

$aContext = array(
    'http' => array(
     'proxy' => 'tcp://proxyip:proxyport', 
     'request_fulluri' => true, 
     'header' => "Proxy-Authorization: Basic $auth" 
    ), 
    'ssl' => array(
     'verify_peer' => false, 
    ), 
); 
$cxContext = stream_context_create($aContext); 

$sFile = file_get_contents("https://www.google.com", False, $cxContext); 

echo $sFile; 
?> 

但是注意,這意味着沒有人是保證你獲得的數據是真實的(因爲ssl證書沒有被驗證)。

如果你想驗證證書,你應該使用根證書在你的問題,但是,你說你有WAMP工作,所以路徑到您的憑證檔案錯誤應該是這樣的:

"cafile" => "c:/wamp/certificates/cacert.pem", 

More important - you said nothing regarding the proxy in your question. Is it something that you need or is it something you found somewhere and just trying to use?

如果您不需要代理,只需從您的請求中刪除即可。

+0

感謝您花時間回覆。不幸的是,我已經嘗試了這些東西,仍然收到錯誤。我編輯了這個問題,試圖使這個更清楚。 – BrightonBoy

0

雖然在macOS上macOS,只需重新啓動MAMP服務器解決了我這個問題。

相關問題