2015-12-11 59 views
4

我用下面這個PHP函數以使用捲曲接觸外部API使用TLS V1.2爲捲曲在亞馬遜AWS

function api_post($url, $data = array()) { 

global $api_key; 
global $password; 

$data = json_encode($data); 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_SSLVERSION, 6); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json', 
    'Accept: application/json' 
)); 

curl_setopt($ch, CURLOPT_USERPWD, $api_key . ':' . $password); 

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 

$response = curl_exec($ch); 

return $response; 
} 

我米,即將堅持使用TLS V1通信的API。 2這是一件好事,除了由於某些原因我的代碼使用1.0版本。

如果我從本地服務器執行它,但在生產服務器上(AWS Elastic Beanstalk上的Amazon Web服務EC2實例),那很好。我想這與我的服務器設置有關,但我不知道如何解決它。

這是我的PHPinfo的捲曲部分。也許我需要升級它或什麼?但是,我會如何做到這一點?

enter image description here

回答

0

好吧,所以我想通了,並認爲我會把答案放在這裏,以防其他人有用。

正如我懷疑問題是捲曲的版本。爲了讓告訴curl使用哪個版本的行能夠生效,我需要使用curl版本7.34或更高版本。

curl_setopt($ch, CURLOPT_SSLVERSION, 6); 

那麼如何升級curl版本?那麼在環境的主頁面上有一個很大的升級按鈕來升級運行在我的實例上的Linux版本,所以我點擊它同時升級了curl。我現在已經卷曲了7.38版本,並且使用了我想要的TLS v1.2。

0

要強制上的捲曲一個TLS版本,您可能需要使用

bool curl_setopt (resource $ch , int $option , mixed $value) 

如記錄在這裏:http://php.net/manual/en/function.curl-setopt.php

例如用於TLS 1.2

curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 6); 

CURLOPT_SSLVERSI ON: CURL_SSLVERSION_DEFAULT(0),CURL_SSLVERSION_TLSv1(1),CURL_SSLVERSION_SSLv2(2),CURL_SSLVERSION_SSLv3(3),CURL_SSLVERSION_TLSv1_0(4),CURL_SSLVERSION_TLSv1_1(5)或CURL_SSLVERSION_TLSv1_2(6)之一。

+1

這已經在OP中設置。 –