Ошибка поставщика SSL с драйвером ODBC 18 для SQL Server в настройке Docker Laravel 11Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка поставщика SSL с драйвером ODBC 18 для SQL Server в настройке Docker Laravel 11

Сообщение Anonymous »

Я столкнулся с ошибкой SSL при попытке подключения к SQL Server с помощью драйвера ODBC 18 в приложении Laravel 11, работающем в контейнере Docker с PHP и Apache. Вот подробности:
Dockerfile

Код: Выделить всё

FROM php:8.3-apache

# Install necessary utilities for SQL Server
RUN apt-get update && apt-get install -y --no-install-recommends \
libpq-dev \
libzip-dev \
zlib1g-dev \
libonig-dev \
libicu-dev \
libjpeg-dev \
libfreetype6-dev \
unzip \
libc-client-dev libkrb5-dev \
gnupg2 lsb-release \
&& docker-php-ext-install \
pdo pdo_mysql mysqli zip bcmath intl exif pcntl \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j "$(nproc)" gd \
&& apt-get install -y libc-client-dev libkrb5-dev \
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
&& docker-php-ext-install imap \
&& apt-get install -y libpcre3-dev \
&& pecl install apcu \
&& docker-php-ext-enable apcu \
&& docker-php-ext-enable opcache

# Add Microsoft repository and GPG key
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update

# Install msodbcsql18 and optional tools
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18

# Install SQL Server dependencies
RUN apt-get update
RUN apt-get install -y wget
# RUN wget http://ftp.br.debian.org/debian/pool/main/g/glibc/multiarch-support_2.24-11+deb9u4_amd64.deb && \
#     dpkg -i multiarch-support_2.24-11+deb9u4_amd64.deb
RUN apt-get -y install msodbcsql18 unixodbc-dev -y
RUN pecl install sqlsrv pdo_sqlsrv
RUN docker-php-ext-enable sqlsrv
RUN docker-php-ext-enable pdo_sqlsrv
RUN apt-get update -yqq \
&& apt-get install -y --no-install-recommends openssl \
&& sed -i 's,^\(MinProtocol[ ]*=\).*,\1'TLSv1.0',g' /etc/ssl/openssl.cnf \
&& sed -i 's,^\(CipherString[ ]*=\).*,\1'DEFAULT@SECLEVEL=1',g' /etc/ssl/openssl.cnf\
&& rm -rf /var/lib/apt/lists/*

# Configure Apache and mod_rewrite
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public/
RUN a2enmod rewrite \
&& sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
&& sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer

# Clean up
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

Конфигурация database.php:

Код: Выделить всё

'sqlsrv' => [
'driver'   => 'sqlsrv',
'host'     => env('DB_SQLSRV_HOST', 'x.x.x.x'), // SQL Server IP
'port'     => env('DB_SQLSRV_PORT', '1433'),
'database' => env('DB_SQLSRV_DATABASE', 'dbname'),
'username' => env('DB_SQLSRV_USERNAME', 'sa'),
'password' => env('DB_SQLSRV_PASSWORD', 'password'),
'charset'  => 'utf8',
'prefix'   => '',
'options'  => [
// 'TrustServerCertificate' => true,
'trust_server_certificate' => false,
'Encrypt' => false,
],
'encrypt' => false,
'trust_server_certificate' => false, // Added this line
],

Сообщение об ошибке:

Код: Выделить всё

SQLSTATE[08001]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:0A000086:SSL routines::certificate verify failed:EE certificate key too weak] (Connection: sqlsrv, SQL: select Userinfo.Name AS Nombre, CONVERT(VARCHAR, CAST(Checkinout.CheckTime AS DATE), 103) AS Fecha, MIN(Checkinout.CheckTime) AS Entrada, MAX(Checkinout.CheckTime AS Salida from [Checkinout] inner join [Userinfo] on [Checkinout].[Userid] = [Userinfo].[Userid] where [Checkinout].[CheckTime] between 2024-09-09 and 2024-09-14 group by [Userinfo].[Name], [CAST(Checkinout].[CheckTime] as [DATE)] order by [Userinfo].[Name] asc, CAST(Checkinout.CheckTime AS DATE))

Кроме того, с сервера Ubuntu 22.04, на котором работает чистое PHP-приложение, я могу успешно подключиться к той же базе данных SQL Server, используя следующую функцию:

Код: Выделить всё

public static function connectBdBascula($base)
{
$nombreServidor = 'x.x.x.x';
$usuario        = 'sa';
$contrasena     = '******';
$puerto         = 1433;

try {
$connectionInfo = "Database = $base;  encrypt=false;";
$db             = new PDO("sqlsrv:server = $nombreServidor; $connectionInfo", $usuario, $contrasena);

return $db;
} catch (Exception $e) {
echo 'Ocurrió un error en la conexión. ' . $e->getMessage();
}
}

Я пробовал установить TrustServerCertificate и Encrypt как внутри, так и вне массива параметров, но ошибка не устранена. Как мне устранить эту ошибку SSL и успешно подключиться к моему SQL-серверу?

Подробнее здесь: https://stackoverflow.com/questions/790 ... cker-setup
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»