Ubuntu 22.04.1 LTS + PHP 8.1 Conectar a MS SQL Server 2014

Escenario, se desea realizar una conexión desde una máquina Linux a un servidor MS SQL Server remota usando PHP.

Paso las especificaciones:
- Ubuntu 22.04.1 LTS - MS SQL Server 2014 (El servidor remoto está bajo Windows 2008 R2).
- PHP Version 8.1.16
- Driver de conexión usadas:
-- pdo_sqlsrv 5.10.1 (confirmado que el módulo está cargado correctamente en la máquina GNU/Linux).

He realizado las siguientes conexiones:

$usuario=sa;
$contrasenya=1234;
//PDO_SQLSRV API
/*$serverName = "192.168.1.88";
$conn = new PDO("sqlsrv:Server = $serverName;
                 Database = mibasedatos;
                 Encrypt = true;
                 TrustServerCertificate = false",
                 $usuario,
                 $contrasenya);
var_dump($conn);*/


$usuario=sa;
$contrasenya=1234;
// SQLSRV API
/*$serverName = "192.168.1.88\\MiInstancia, 1433";
$connectionInfo = array( "Database"=>mibasedatos,
                         "UID"=>$usuario,
                         "PWD"=>$contrasenya,
                   "CharacterSet" => 'UTF-8',
                         "Encrypt"=>true,
                         "TrustServerCertificate"=>false);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
     echo "<b>Connection established.</b><br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}*/


function OpenConnection()
    {
        $serverName = "tcp:192.168.1.88,1433";
        $connectionOptions = array("Database"=>"mibasedatos",
            "Uid"=>"sa", "PWD"=>"1234");
        $conn = sqlsrv_connect($serverName, $connectionOptions);
        if($conn == false)
            die( print_r( sqlsrv_errors(), true));

        return $conn;
    }
   OpenConnection();


En todas el error es similar:
Array ( [0] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 10054 [kode] => 10054 [2] => [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746 [message] => [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746 ) [1] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 10054 [kode] => 10054 [2] => [Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection [message] => [Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection ) )


He realizado conexión desde consola con tsql y conecta correctamente.
tsql -H 192.168.1.88 -p 1433 -D mibasedatos -U sa -P 1234


Desde gestores visuales tipo DBeaver puedo conectar sin problemas al motor, pero claro utilizan otros Drivers propios, en Java creo propios para realizar la conexión; por lo que descartado que pueda ser algo a nivel de FW de la máquina GNU/Linux.

He cambiado también el nivel de seguridad de OpenSSL.

¿Alguien ha conseguido realizar una conexión en este escenario?
Buenas


Prueba a cambiar este parámetro en la conexión: "TrustServerCertificate"=>true

Fuente
@RuSpider gracias, previamente probado y tampoco [decaio]

Tengo la ligera sospecha que el problema puede estar en el servidor remoto Win2008.
Contra un servidor Win2016 + MS SQL 2019 conecta sin problema.

Por lo que he podido leer parece que al no tener el soporte TLS 1.2 habilitado en Win2008 el problema podría venir por ahi.

¿Es necesario tener soporte para TLS 1.2 para poder utilizar pdo_sqlsrv 5.10.1 y sqlsrv 5.11.0-beta1 con PHP Version 8.1.16?

Compatibilidad byDefault: https://learn.microsoft.com/en-us/windo ... annel-ssp-
Puede ser pero para salir de dudas actuva tls 1.2 en windows 2008 r2

https://help.clouding.io/hc/es/articles ... er-2008-R2

Saludos
"Solucionado" temporalmente utilizando FreeTDS https://github.com/FreeTDS/freetds

Modificando los ficheros:
odbcinst.ini
odbc.ini

Tengo mis dudas en cuanto a rendimiento, si puede ser una solución definitiva en entornos de producción.
@Newton
Vaya movida que da usar versiones antiguas.. a nosotros en el curro muchos proveedores han pasado a TLS 1.3, lo peor que avisan con 1 semana de antelación... pero bueno por suerte todo nos funciona con TLS 1.3, tenemos que actualizar todos los servidores a php 8.x... están con 7.4 y alguno con 5.6... eso si que será fiesta porque 90% del software que hay ahora mismo montado con PHP no va con 8.x

Un saludo
5 respuestas