Pular para o conteúdo
PHP

PHP — Seu servidor esta pronta para as evolução do TLS?

Atualizado em
Capa do artigo: PHP — Seu servidor esta pronta para as evolução do TLS?

Olá Gente

Todas tecnologias evoluem, segurança não é diferente, o TLS esta sendo implantado gradativamente a algum tempo, e este ano diversas plataformas estão passando a permitir apenas o TLS 1.2 (Ou superior).

Achas que isto não ira te afetar? Usa Paypal em seu site? Então veja:

PayPal Security GuidelinesPayPal API referencepaypal.com

Toda plataforma esta atualizando suas apis para os novos protocolos de segurança e isto requer que nós, desenvolvedoras, fiquemos atentas.

Vamos ver o problema acontecendo, irei tentar fazer um GET para a API do paypal através de um servidor rodando PHP 5.2 utilizando OpenSSL/0.9:

<?php
$ch 			= curl_init("https://www.sandbox.paypal.com/cgi-bin/webscr");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$res 			= curl_exec($ch);
$curl_errno 	= curl_errno($ch);
$curl_err 		= curl_error($ch);
$httpcode 		= curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($curl_errno) 
{
    
	echo "HTTP_CODE: " . $httpcode;
	echo "<br>";
	echo "ERRO: " . $curl_errno . ": " . $curl_err;
	
}else{
    
	echo "HTTP_CODE: " . $httpcode;
	
}

curl_close($ch);
?>

Automáticamente gera o erro:

HTTP_CODE: 0
ERRO: 35: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

Agora iremos fazer a mesma chamada em um servidor rodando PHP 7.0 utilizando OpenSSL/1.0.2o:

HTTP_CODE: 302

Sem Erro!

Mas como vou saber se meu servidor é compatível?

Faça uma chamada GET para https://www.howsmyssl.com/a/check, será indicado qual a versão mais recente ativa no TLS do seu servidor:

<?php
$ch 		= curl_init('https://www.howsmyssl.com/a/check');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$data 		= curl_exec($ch);
$json	 	= json_decode($data, true);

curl_close($ch);

echo "tls_version: " . $json["tls_version"];
?>

No parametro tls_version será indicado a versão do TLS ativa.

Segue teste no PHP 5.2:

tls_version: TLS 1.0

E teste no PHP 7.0:

tls_version: TLS 1.2

Mas e se tenho uma aplicação Rodando PHP 5.2 e quero utilizar o TLS 1.2? Ai você vai começar a ver o problema.

Para utilizar o TLS 1.2 você precisar possuir o OpenSSL ≥ 1.0.1c, e para atualizar o OpenSSL você precisa atualizar o PHP!

Então comece logo a atualizar suas aplicações antigas!

Por hoje é isto, queridos desenvolvedores! 👩‍💼

Até logo! 👋

PHP

Leia também