Использую mariadb на FreeBSD. В связи с POODLE было принято решение отказаться от использования SSL и перейти на TLS. Для установки tls в mysql или в mariadb необходимо установить openssl из портов с отключеным SSL. Осложнения возникли при попытке пересобрать mariadb, потому что mariadb собраная ранее с идущим в поставке yassl наотрез отказывалась пересобираться ругаясь на наличие портового openssl
** Port marked as IGNORE: databases/mariadb55-client:
security/openssl package is installed. To build this either select the OPENSSL and PORTSSL options or deinstall openssl
** Listing the failed packages (-:ignored / *:skipped / !:failed)
— databases/mariadb55-client (marked as IGNORE)
Вариант “или я или она” меня не устраивал. Поэтому всё равно собираем mariadb с портовым openssl выставив нужные флаги
[X] SSL SSL protocol support [X] OPENSSL Use OpenSSL instead of bundled yassl [X] PORTSSL Use OpenSSL from port (requires OPENSSL to be set)
Теперь нужно разобраться с сертификатами. Важно чтобы Common Name сертификатов/ключей сервера и клиента отличалить от Common Name CA сертификата. В yassl общий Common Name не является помехой в установлении соединения. С openssl такое не проходит. Поэтому сертификаты лучше перегенирировать
Создание сертификата CA
openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem
Создание сертификата сервера, удаление пароля и подписывание
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem openssl rsa -in server-key.pem -out server-key.pem openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Создание сертификата клиента, удаление пароля и подписывание
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem openssl rsa -in client-key.pem -out client-key.pem openssl x509 -req -in client-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Проверка сертификатов
openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
server-cert.pem: OK
client-cert.pem: OK
ca-cert.pem server-cert.pem, server-key.pem — оставляем на сервере и в my.cnf прописываем пути
[mysqld] ... ssl-ca=/etc/ssl/certs/mysql/ca-cert.pem ssl-cert=/etc/ssl/certs/mysql/server-cert.pem ssl-key=/etc/ssl/certs/mysql/server-key.pem
ca-cert.pem client-cert.pem, client-key.pem — отдаём клиенту
Проверка
В настройках соединения на клиенте указываем путь к ключам. Соединяемся, выполняем команды
SHOW STATUS LIKE 'Ssl_version';
Ssl_version TLSv1
SHOW STATUS LIKE 'Ssl_cipher';
Ssl_cipher DHE-RSA-AES256-SHA
Соединине состоялось по TLSv1 с использованием шифра DHE-RSA-AES256-SHA. Поздравляю!
P.S.
Клиенты поддерживающие шифрованые соединения
HeidiSQL (win32/64, linux под wine)
MySQL Workbench (win32/64, linux)

- Системный администратор с 2000 года
- Участник Хабр Q&A и cyberforum
- Кейсы