W3docs

Guia Completo sobre a Função mysqli_ssl_set em PHP

Aprenda como a função mysqli_ssl_set configura parâmetros SSL/TLS para estabelecer conexões seguras com o MySQL em PHP.

Ao trabalhar com bancos de dados MySQL em PHP, a extensão mysqli oferece diversas funções para realizar operações de banco de dados. Uma dessas funções é mysqli_ssl_set, que configura parâmetros SSL/TLS para estabelecer uma conexão segura com um servidor MySQL.

Neste guia, explicaremos como mysqli_ssl_set funciona, seus parâmetros e como implementá-la corretamente em seus projetos PHP.

O que é a Função mysqli_ssl_set?

A função mysqli_ssl_set é uma função PHP integrada que configura opções SSL/TLS para um objeto de conexão MySQL. Ela é utilizada para garantir a transmissão segura de dados entre o seu script PHP e o servidor MySQL.

A função aceita seis parâmetros. O primeiro argumento é o objeto de conexão MySQL retornado por mysqli_init(). Os demais argumentos especificam os caminhos para a chave SSL, o certificado, o certificado CA, o caminho do certificado CA e o conjunto de cifras.

Veja a seguir a sintaxe da função mysqli_ssl_set:

Sintaxe da função mysqli_ssl_set

mysqli_ssl_set($connection, $key, $cert, $ca, $capath, $cipher);

Parâmetros

ParâmetroDescrição
$connectionUm objeto de conexão criado com mysqli_init(). Obrigatório.
$keyCaminho para o arquivo de chave privada do cliente (PEM). Passe null se não for utilizado.
$certCaminho para o arquivo de certificado de chave pública do cliente (PEM). Passe null se não for utilizado.
$caCaminho para o arquivo de autoridade certificadora (CA) usado para verificar o servidor. Passe null se não for utilizado.
$capathCaminho para um diretório de certificados CA confiáveis no formato PEM. Passe null se não for utilizado.
$cipherUma lista de cifras permitidas para uso com SSL/TLS. Passe null para usar os valores padrão.

Qualquer parâmetro desnecessário pode ser passado como null. Uma configuração mínima comum fornece apenas o arquivo CA ($ca) para que o cliente possa verificar o certificado do servidor, deixando os demais como null.

Quando utilizar?

Você usa mysqli_ssl_set sempre que a aplicação PHP e o servidor MySQL se comunicam por uma rede não confiável — por exemplo, um servidor web conectando-se a um banco de dados em nuvem gerenciado, ou qualquer conexão que atravesse a internet pública. Sem SSL/TLS, credenciais e resultados de consultas trafegam em texto simples e podem ser lidos por qualquer pessoa que consiga observar o tráfego.

Recursos da Função mysqli_ssl_set

A função mysqli_ssl_set oferece diversas capacidades que a tornam essencial para proteger as comunicações com o banco de dados em PHP. Alguns dos principais recursos incluem:

1. Transmissão Segura de Dados

O objetivo principal de mysqli_ssl_set é configurar um canal criptografado SSL/TLS entre sua aplicação PHP e o servidor MySQL. Isso protege dados sensíveis de interceptação durante o trânsito.

2. Configuração Antes da Conexão

A função permite definir parâmetros SSL em um objeto de conexão antes que a conexão real seja estabelecida. Isso garante que o servidor imponha criptografia desde o início do handshake.

3. Valor de Retorno Booleano

A função retorna um valor booleano indicando sucesso ou falha. Ela não gera avisos ou erros automaticamente; em vez disso, você deve verificar o valor de retorno e usar mysqli_connect_error() ou mysqli_error() para obter informações detalhadas sobre a falha, se necessário.

Como Usar a Função mysqli_ssl_set

Para usar mysqli_ssl_set corretamente, você deve inicializar o objeto de conexão, definir os parâmetros SSL e, em seguida, estabelecer a conexão usando mysqli_real_connect(). A ordem importa: mysqli_ssl_set() apenas armazena as opções SSL no objeto de conexão. Elas são aplicadas durante o handshake realizado por mysqli_real_connect(), portanto chamar mysqli_ssl_set() após uma conexão já estar aberta não tem efeito.

1. Inicializar e Configurar Parâmetros SSL

Primeiro, crie um objeto de conexão usando mysqli_init(), em seguida aplique as configurações SSL antes de conectar:

Exemplo da Função PHP mysqli_ssl_set

<?php

$connection = mysqli_init();
if (!$connection) {
    die('mysqli_init failed');
}

// Set SSL parameters before connecting
mysqli_ssl_set($connection, '/path/to/ssl/key', '/path/to/ssl/cert', '/path/to/ssl/ca', null, null);

// Establish the connection
if (!mysqli_real_connect($connection, 'localhost', 'username', 'password', 'mydatabase')) {
    die('Connection failed: ' . mysqli_connect_error());
}

echo 'Secure connection established successfully.';
?>

2. Verificar a Conexão Criptografada

Após conectar, você pode verificar se o SSL está ativo consultando o status do servidor com mysqli_query(). Se a conexão estiver criptografada, Ssl_cipher retorna o nome da cifra negociada; se estiver vazio, a conexão não está usando SSL:

<?php
$result = $connection->query("SHOW STATUS LIKE 'Ssl_cipher'");
$row = $result->fetch_row();

if (!empty($row[1])) {
    echo 'Encrypted connection using cipher: ' . $row[1];
} else {
    echo 'Connection is NOT encrypted.';
}
?>

Problemas comuns

  • Falha na verificação do certificado. Se mysqli_real_connect() falhar com um erro de certificado, certifique-se de que o arquivo $ca corresponde à autoridade que assinou o certificado do servidor e que o arquivo é legível pelo processo PHP.
  • SSL ignorado silenciosamente. Uma conexão bem-sucedida não garante criptografia. Sempre confirme com a verificação Ssl_cipher acima e verifique mysqli_connect_error() quando mysqli_real_connect() retornar false.
  • Ordem das chamadas. Defina as opções SSL com mysqli_ssl_set() antes de chamar mysqli_real_connect(), não depois.

Conclusão

A função mysqli_ssl_set é uma ferramenta essencial para proteger as comunicações com o banco de dados em PHP. Ao configurar os parâmetros SSL/TLS antes de chamar mysqli_real_connect(), você garante que todos os dados trocados entre sua aplicação e o servidor MySQL trafeguem por um canal criptografado. Sempre verifique a configuração SSL do seu servidor e confira o status da conexão para manter uma segurança robusta em seus projetos.

Prática

Prática
O que é verdadeiro sobre mysqli_ssl_set() em PHP?
O que é verdadeiro sobre mysqli_ssl_set() em PHP?
Was this page helpful?