LINUX.ORG.RU
ФорумAdmin

SSL PHP PDO - mysql обновления безопасности от 19.11.2019

 , ,


0

1

Доброго времени суток!

19.11.2019 в 06:39:39 произошло автоматическое обновление (security репозитории) Ubuntu (18.04.3 LTS). Перестало работать SSL подключение из PHP (PDO) до mysql. Сайт и база на одном сервере. В логах mysql предупреждение (каждый раз после перезагрузки службы, раньше не было такого):
[Warning] CA certificate /etc/mysql/ssl/... is self signed. (это сертификат CA - роль adcs на windows server)

Ошибка PHP:
PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:14094413:SSL routines:ssl3_read_bytes:sslv3 alert unsupported certificate in

Ошибка при рукопожатии:
140644656251328:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:332:

Ошибка при подключении к базе с указанием сертификата (ошибка указывает, что CN в сертификатах одинаковый - это так и было до этого момента - сервер один, пробовал создать сертификат с отличным CN не помогло):
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

Пакеты которые были обновлены

124 Start-Date: 2019-11-19 06:39:39
125 Commandline: /usr/bin/unattended-upgrade
126 Upgrade: libmysqlclient20:amd64 (5.7.27-0ubuntu0.18.04.1, 5.7.28-0ubuntu0.18.04.4)
127 End-Date: 2019-11-19 06:39:42
128
129 Start-Date: 2019-11-19 06:39:45
130 Commandline: /usr/bin/unattended-upgrade
131 Upgrade: libssl1.1:amd64 (1.1.1-1ubuntu2.1~18.04.4, 1.1.1-1ubuntu2.1~18.04.5)
132 End-Date: 2019-11-19 06:39:49
133
134 Start-Date: 2019-11-19 06:39:51
135 Commandline: /usr/bin/unattended-upgrade
136 Upgrade: mysql-client-5.7:amd64 (5.7.27-0ubuntu0.18.04.1, 5.7.28-0ubuntu0.18.04.4)
137 End-Date: 2019-11-19 06:39:57
138
139 Start-Date: 2019-11-19 06:39:59
140 Commandline: /usr/bin/unattended-upgrade
141 Upgrade: mysql-client-core-5.7:amd64 (5.7.27-0ubuntu0.18.04.1, 5.7.28-0ubuntu0.18.04.4)
142 End-Date: 2019-11-19 06:40:06
143
144 Start-Date: 2019-11-19 06:40:07
145 Commandline: /usr/bin/unattended-upgrade
146 Upgrade: mysql-server:amd64 (5.7.27-0ubuntu0.18.04.1, 5.7.28-0ubuntu0.18.04.4)
147 End-Date: 2019-11-19 06:40:10
148
149 Start-Date: 2019-11-19 06:40:12
150 Commandline: /usr/bin/unattended-upgrade 151 Upgrade: openssl:amd64 (1.1.1-1ubuntu2.1~18.04.4, 1.1.1-1ubuntu2.1~18.04.5)
152 End-Date: 2019-11-19 06:40:16
153
154 Start-Date: 2019-11-19 06:40:19
155 Commandline: /usr/bin/unattended-upgrade
156 Upgrade: mysql-server-5.7:amd64 (5.7.27-0ubuntu0.18.04.1, 5.7.28-0ubuntu0.18.04.4), mysql-server-core-5.7:amd64 (5.7.27-0ubuntu0.18.04.1, 5.7.28-0ubuntu0.18.04.4)
157 End-Date: 2019-11-19 06:41:27

Кто сталкивался, есть мысли как исправить или какой пакет из обновленных привел к этому вопросу?


У меня так когда-то отвалился curl с php

«Исправил» временно правкой /etc/ssl/openssl.cnf пока еще не обновилась второая сторона

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
paganmind ()

зря ты так.

Согласен

может быть пора использовать что-то более современное ?
Скорее всего ты хочешь какое-нибудь TLSv1.2, а не SSLv3.

Пора! Хочу! Есть примеры для PHP PDO?

«Исправил» временно правкой /etc/ssl/openssl.cnf пока еще не обновилась второая сторона

Не помогло

[ssl_sect] system_default = system_default_sect

[system_default_sect] MinProtocol = TLSv1.0 CipherString = DEFAULT@SECLEVEL=1

X3PPY ()

Выпусти новый сертификат, не sslv3.

Подскажешь как? Это должно быть что-то в запросе или на стороне сервера CA?

это мой конфиг. можно попробовать понизить не до TLS1.0, а до SSL3 как в проблеме

Не помогло

X3PPY ()

это мой конфиг. можно попробовать понизить не до TLS1.0, а до SSL3 как в проблеме
Не помогло

Кроме того, mysql поддерживает только:
tls_version | TLSv1,TLSv1.1,TLSv1.2

А в конфигурации apache2:
SSLProtocol all -SSLv2 -SSLv3

X3PPY ()
Ответ на: комментарий от Darth_Revan

Ещё бы версию PHP (7.2.24-0ubuntu0.18.04.1?) и пример подключения PDO: DSN и опции т.е.

php -v
PHP 7.2.24-0ubuntu0.18.04.1 (cli) (built: Oct 28 2019 12:07:07) ( NTS )

mysql --version
mysql Ver 14.14 Distrib 5.7.28, for Linux (x86_64) using EditLine wrapper

apache2 -v
Server version: Apache/2.4.29 (Ubuntu)

Пример:
// Параметры для PDO
$dsn = «$db_type:host=$db_host;dbname=$db_name;charset=$db_charset»;
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
// SSL параметры для PDO
if ($db_type == 'mysql' && $ssl_key != " && $ssl_cert != " && $ssl_ca != "){
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
// PDO::MYSQL_ATTR_SSL_CIPHER => ECDHE-RSA-AES128-GCM-SHA256,
PDO::MYSQL_ATTR_SSL_KEY => $ssl_key,
PDO::MYSQL_ATTR_SSL_CERT => $ssl_cert,
PDO::MYSQL_ATTR_SSL_CA => $ssl_ca,
];
}
// Подключение
try {
$pdo = new PDO($dsn, $db_user, $db_pass, $opt);
} catch (PDOException $e)
// Вывод ошибки в браузер
die(«Ошибка связи с базой данных: ».$e);
die(«Ошибка связи с базой данных»);
}

X3PPY ()

В Ubuntu 18.04 собрали Oracle MySQL 5.7.28 с OpenSSL вместо встроенного yaSSL как раньше.
Видимо, он по какой-то причине не принимает твой сертификат.
Можешь попробовать MariaDB 10.1.43, они его оставили на yaSSL по какой-то причине.

Darth_Revan ★★★★★ ()
Ответ на: комментарий от Darth_Revan

Все сборки MySQL 5.7 теперь используют OpenSSL. MySQL больше не поддерживает использование yaSSL в качестве библиотеки SSL, а исходные дистрибутивы больше не включают yaSSL.

https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-28.html

Спасибо, буду смотреть в эту сторону. Вообще интересно чем не устроил openssl мой сертификат.

X3PPY ()
Ответ на: комментарий от Darth_Revan

Пока нет решения... Единственное что узнал, что никакой ssl3 не используется. Все идет через TLSv1.2. По tcpdump видно, что сервер (mysql) отвечает клиенту (apache2\php?) Alert (Level: Fatal, Description: Unsupported Certificate) после чего посылает флаг закрытия соединения Reset: set...

Т.е. apache2 отдает сертификат который я указываю в PDO, mysql его проверяет и говорит - не нравится. А как сделать чтобы понравился? Сертификат CA одинаковый. Даже установил его через update-ca-certificates...

X3PPY ()