Я установил SSL-сертификат Letsencrypt на свой VPN-сервер Ubuntu 20.4, и он работает. Теперь я пытаюсь настроить mysql на этом сервере для SSL. Я прочитал много связанных сообщений, посвященных одной и той же проблеме, и я потратил много часов, чтобы исправить это, но безуспешно.
Вот шаги, которые я сделал:
Я скопировал файлы cert.pem, chain.pem, fullchain.pem и privkey.pem в /var/lib/mysql.
Это те же самые файлы, которые я использовал для настройки SSL моего
домен.
Конфигурация в mysql была непонятна. Я пробовал разные комбинации в [mysql] и [mysqld]. Тот, который я ожидал быть правильным, не работал: ssl_ca=/var/lib/mysql/cert.pem
,ssl_cert=/var/lib/mysql/chain.pem
,ssl_key=/var/lib/mysql/privkey.pem
Только эта конфигурация работает без выдачи ошибки. Примечание: fullchain.pem содержит сертификаты из cert.pem и chain.pem. В /etc/mysql/mysql.conf.d:
[mysqld]
ssl_cert=/var/lib/mysql/fullchain.pem
ssl_key=/var/lib/mysql/privkey.pem
Я могу подключиться к mysql локально со своего сервера, и при проверке атрибутов ssl я получаю:
(я перечисляю только переменные со значениями)
| Имя_переменной | Значение |
+---------------------------------------------+----------- -----+
| have_openssl | ДА |
| have_ssl | ДА |
| performance_schema_show_processlist | ВЫКЛ |
| ssl_cert | /var/lib/mysql/fullchain.pem | |
| ssl_fips_mode | ВЫКЛ |
| SSL_ключ | /var/lib/mysql/privkey.pem
Когда я бегу MySQL > \s
, Я получил:
mysql версии 8.0.21 для Win64 на x86_64 (сервер сообщества MySQL — GPL)
Идентификатор соединения: 66
Текущая база данных:
Текущий пользователь: someUser@someIP
SSL: используется шифр TLS_AES_256_GCM_SHA384.
Использование разделителя: ;
Версия сервера: 8.0.26-0ubuntu0.20.04.3 (Ubuntu)
Версия протокола: 10
Соединение: maraxai.de через TCP/IP
Набор символов сервера: utf8mb4
Набор символов БД: utf8mb4
Набор символов клиента: cp850
Набор символов соединения: cp850
TCP-порт: 3306
Двоичные данные как: Шестнадцатеричный
Когда я бегу $ openssl s_client -connect maraxai.de:3306 -имя_сервера maraxai.de
, я ожидаю получить тот же результат, что и с $ openssl s_client -connect maraxai.de:443 -имя_сервера maraxai.de
, то есть полная цепочка сертификатов с успешным рукопожатием, но вместо этого я получаю:
139990121219392: ошибка: 1408F10B: процедуры SSL: ssl3_get_record: неверный номер версии:../ssl/record/ssl3_record.c:331:
---
нет доступного однорангового сертификата
---
Имена ЦС сертификата клиента не отправлены
---
Рукопожатие SSL прочитало 5 байт и записало 302 байта
Проверка: ОК
---
Новый, (НЕТ), Шифр (НЕТ)
Безопасное повторное согласование НЕ поддерживается
Сжатие: НЕТ
Расширение: НЕТ
ALPN не согласован
Предварительные данные не были отправлены
Подтвердите код возврата: 0 (хорошо)
В некоторых сообщениях предполагалось, что строка Рукопожатие SSL прочитало 5 байт и записало 302 байта
предполагает, что рукопожатие SSL было начато, но прервано, так как сервер возвращает что-то неожиданное.
Для дальнейшей проверки я использую openssl s_client -connect maraxai.de:3306 -имя_сервера maraxai.de -starttls mysql
. Первый раздел рассказывает мне о ошибка: число = 20: невозможно получить сертификат локального эмитента
и error:num=21:сертификат сервера не проверен
для сертификата сервера (глубина: 0)
. Далее я вижу только один сертификат (cert.pem). Промежуточные сертификаты chain.pem не указаны. Это странно, поскольку я использую fullchain.pem, который представляет собой конкатенацию сертификатов в chain.pem и cert.pem.
ПОДКЛЮЧЕН(00000003)
глубина=0 CN = maraxai.de
ошибка подтверждения: число = 20: невозможно получить сертификат локального эмитента
проверить возврат: 1
глубина=0 CN = maraxai.de
ошибка проверки: число = 21: невозможно проверить первый сертификат
проверить возврат: 1
---
Цепочка сертификатов
0 s:CN = maraxai.de
i:C = US, O = Let’s Encrypt, CN = R3
---
Сертификат сервера
-----НАЧАТЬ СЕРТИФИКАТ-----
//МИФ...
-----КОНЕЦ СЕРТИФИКАТА-----
тема = CN = maraxai.de
эмитент = C = США, O = Let's Encrypt, CN = R3
---
Имена ЦС сертификата клиента не отправлены
Запрошенные алгоритмы подписи: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384: RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:RSA+SHA224
Алгоритмы общей запрашиваемой подписи: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384 :RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512
Дайджест одноранговой подписи: SHA256
Тип одноранговой подписи: RSA-PSS
Временный ключ сервера: X25519, 253 бита
---
SSL-рукопожатие прочитало 2027 байт и записало 448 байт.
Ошибка проверки: не удалось проверить первый сертификат
---
Новый, TLSv1.3, шифр TLS_AES_256_GCM_SHA384.
Открытый ключ сервера 2048 бит.
Безопасное повторное согласование НЕ поддерживается
Сжатие: НЕТ
Расширение: НЕТ
ALPN не согласован
Предварительные данные не были отправлены
Код возврата проверки: 21 (невозможно проверить первый сертификат)
---
---
Билет на новую сессию после рукопожатия прибыл:
SSL-сессия:
Протокол: TLSv1.3
Шифр: TLS_AES_256_GCM_SHA384.
Идентификатор сеанса: B157BD91FF0A458D6A546C26CB5665C95CD88B99CE6C66A5D98783642C39EFA4.
Идентификатор сеанса-ctx:
Возобновление PSK: CB807FC16CE11EB47FE7BDDD99C71A5AAF1AE5CDC600A127230E914AFC4AE1018A34F72F44741D2440EB4917D5DDD0D7
Идентификация PSK: нет
Подсказка идентификации PSK: нет
Имя пользователя SRP: нет
Подсказка о сроке действия билета сеанса TLS: 7200 (секунд)
Билет сеанса TLS:
// ...0000 - 00e0
Время начала: 1645286635
Время ожидания: 7200 (сек)
Код возврата проверки: 21 (невозможно проверить первый сертификат)
Расширенный главный секрет: нет
Макс. ранние данные: 0
---
читать Р БЛОК
2ââ#08S01Получено тайм-аут чтения коммуникационных пакетовread:errno=0
Чтобы проверить, правильно ли установлены эмитенты и субъекты сертификатов, я запускаю:
openssl crl2pkcs7 -nocrl -certfile fullchain.pem | openssl pkcs7 -print_certs -noout
Здесь все выглядит нормально:
тема = CN = maraxai.de
эмитент = C = США, O = Let's Encrypt, CN = R3
subject=C = US, O = Let’s Encrypt, CN = R3
эмитент = C = США, O = Исследовательская группа по безопасности в Интернете, CN = ISRG Root X1
subject=C = США, O = Исследовательская группа по безопасности в Интернете, CN = ISRG Root X1
эмитент=O = Digital Signature Trust Co., CN = DST Root CA X3
Кроме того, для privkey.pem я изменил формат ключа на PKCS#1, чтобы получить правильный заголовок. -----НАЧАТЬ ЗАКРЫТЫЙ КЛЮЧ RSA-----
с командой $ openssl rsa -in privkey.pem -out privkey.pem
.
Я понятия не имею, как дальше исследовать этот вопрос. Любая помощь будет принята с благодарностью.