Я изо всех сил пытаюсь получить экземпляр Dockerised MySQL для поддержки SSL.
Служба в моем файле docker-compose выглядит так:
mysql:
image: mysql:5.7
container_name: mysql
command: --default-authentication-plugin=mysql_native_password --ssl-ca=/etc/ssl/mysql/ca.pem --ssl-cert=/etc/ssl/mysql/server-cert.pem --ssl-key=/etc/ssl/mysql/server-key.pem
restart: always
expose:
- 3306
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
volumes:
- "./data/db:/var/lib/mysql"
- "./config/mysql/my.cnf:/etc/mysql/conf.d/ssl.cnf"
- "./config/mysql/certs:/etc/ssl/mysql"
Когда я запускаю стекЯ получаю эти ошибки из контейнера MySQL:
[ERROR] SSL error: Unable to get private key from '/etc/ssl/mysql/server-key.pem'
[Warning] Failed to set up SSL because of the following SSL library error: Unable to get private key
Я пытался сократить ключ от root
до mysql
, а затем снова вызвать стек, но, похоже, это не работает.
Я сгенерировал файлы ключей из команд на https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-files-using-openssl.html, следующим образом:
# Create server certificate, remove passphrase, and sign it
# server-cert.pem = public key, server-key.pem = private key
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.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Файлы на хосте имеют следующие разрешения:
drwxrwxr-x 2 andrew andrew 4096 Dec 11 10:25 ./
drwxrwxr-x 3 andrew andrew 4096 Dec 10 19:27 ../
-rw-rw-r-- 1 999 docker 1675 Dec 10 19:20 ca-key.pem
-rw-rw-r-- 1 999 docker 1294 Dec 10 19:20 ca.pem
-rw-rw-r-- 1 999 docker 1123 Dec 10 19:20 client-cert.pem
-rw-rw-r-- 1 999 docker 1679 Dec 10 19:20 client-key.pem
-rw-rw-r-- 1 999 docker 989 Dec 10 19:20 client-req.pem
-rw-rw-r-- 1 999 docker 1127 Dec 10 19:20 server-cert.pem
-rw------- 1 999 docker 1675 Dec 11 10:25 server.key
-rw-rw-r-- 1 999 docker 1704 Dec 11 09:43 server-key.pem
-rw-rw-r-- 1 999 docker 956 Dec 11 09:43 server-req.pem
Это происходит, если я вручную генерирую сертификаты и монтирую их как том, или если я запускаю оболочку в контейнере и запускаю команду mysql_ssl_rsa_setup --datadir=/etc/ssl/mysql --verbose
(после очистки созданных мной сертификатов). Другими словами, когда я запускаю openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
, я вижу, что оба сертификата в порядке (независимо от того, каким образом я их генерирую).
Почему MySQL не может найти закрытый ключ из этого файла?