2015-05-09 11 views
16

Ho problemi a curvare un URL HTTPS che utilizza TLS1.2, nella mia operazione di arricciamento pubblico i miei dati di accesso nel sito Web e li salvo in cookiefile. Il messaggio di errore che sto ottenendo questoTLS 1.2 non funziona in cURL

error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error 

Ho provato a fissare VERIFYPEER e VERIFYHOST-0, ma che non sembra funzionare, qualche suggerimento?

Qui ci sono le versioni che sto usando:

  • versione OpenSSL è 0.9.8b
  • versione CURL è 7.24.0
  • PHP è 5,3

Ecco il codice:

$setuplogin = curl_init(); 
curl_setopt ($setuploginurl, CURLOPT_URL, $url); 
curl_setopt ($setuploginurl, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt ($setuploginurl, CURLOPT_SSL_VERIFYHOST, 1); 
curl_setopt ($setuploginurl, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2'); 
curl_setopt ($setuploginurl, CURLOPT_POSTFIELDS, 'username=uname&password=pword&act=login&submit=Login'); 
curl_setopt ($setuploginurl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36"); 
curl_setopt (setuploginurl, CURLOPT_TIMEOUT, 60); 
curl_setopt ($setuploginurl, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt ($setuploginurl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($setuploginurl, CURLOPT_HEADER, 1); 
curl_setopt ($setuploginurl,CURLOPT_ENCODING,"gzip"); 
curl_setopt ($setuploginurl, CURLOPT_POST, true); 
curl_setopt ($setuploginurl, CURLOPT_COOKIEJAR, 'cookies.txt'); 
curl_setopt ($setuploginurl, CURLOPT_FRESH_CONNECT , 1); 

$loginp= curl_exec($setuploginurl); 
if ($loginp === FALSE) { 
    die(curl_error($setuploginurl)); 
} 

curl_close ($setuploginurl); 
var_dump ($loginp); 
+2

Si consiglia di utilizzare 2 per CURLOPT_SSL_VERIFYHOST, non 1. – Bruno

+0

Non so se questo è automatico ma passare a PHP v 5.6.33 ha risolto il problema . –

risposta

15

TLS 1.1 e TLS 1.2 sono supp orted dal OpenSSL 1.0.1

Forzare TLS 1.1 e 1.2 sono supportati solo dalla curl 7.34.0

Si dovrebbe prendere in considerazione un aggiornamento.

+0

Curl ha anche aggiunto solo il supporto a TLS 1.2 alla versione [7.34.0] (http://curl.haxx.se/docs/manpage.html#--tlsv12) – Hannele

+0

L'aggiornamento a OpenSSL 1.0.1 ha risolto un problema simile per me . – OfficeAddinDev

+1

Ho dovuto aggiornare nss openssl curl per farlo funzionare su Centos 6.4. –

35

È necessario utilizzare un valore intero per il valore CURLOPT_SSLVERSION, non una stringa, come riportato sopra

Prova questo:

curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 6); //Integer NOT string TLS v1.2 

http://php.net/manual/en/function.curl-setopt.php

valore deve essere un numero intero per i seguenti valori del parametro opzione: CURLOPT_SSLVERSION

Uno dei

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).

+3

puoi ancora usare 'CURL_SSLVERSION_TLSv1_2' - deve solo essere una costante, cioè non tra virgolette. 'curl_setopt ($ setuploginurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);' funziona per me. – billynoah

+0

CURL_SSLVERSION_TLSv1_2 questo è disponibile da php 5.5.19, in php 5.3 non funziona. –

3

Sostituire seguente

curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2'); 

Con

curl_setopt ($ch, CURLOPT_SSLVERSION, 6); 

Dovrebbe funzionare senza problemi.

5

mi ha problema simile in contesto di righe:

Error: Stripe no longer supports API requests made with TLS 1.0. Please initiate HTTPS connections with TLS 1.2 or later. You can learn more about this at https://stripe.com/blog/upgrading-tls .

Forzare TLS 1.2 tramite il parametro ARRICCIATURA è soluzione temporanea o addirittura non può essere applicato a causa della mancanza di spazio per posizionare un aggiornamento.Dalla prova TLS impostazione predefinita funzione https://gist.github.com/olivierbellone/9f93efe9bd68de33e9b3a3afbd3835cf mostrato seguente configurazione:

SSL version: NSS/3.21 Basic ECC 
SSL version number: 0 
OPENSSL_VERSION_NUMBER: 1000105f 
TLS test (default): TLS 1.0 
TLS test (TLS_v1): TLS 1.2 
TLS test (TLS_v1_2): TLS 1.2 

I librerie aggiornate utilizzando seguente comando:

yum update nss curl openssl

e poi ha visto questo:

SSL version: NSS/3.21 Basic ECC 
SSL version number: 0 
OPENSSL_VERSION_NUMBER: 1000105f 
TLS test (default): TLS 1.2 
TLS test (TLS_v1): TLS 1.2 
TLS test (TLS_v1_2): TLS 1.2 

Si prega di notare che la versione di default TLS cambiato a 1.2! Questo problema risolto a livello globale. Questo aiuterà anche gli utenti PayPal: https://www.paypal.com/au/webapps/mpp/tls-http-upgrade (aggiornamento entro fine giugno 2017)