Как использовать зашифрованное соединение с MySQL на Docker - PullRequest
0 голосов
/ 11 декабря 2019

Я изо всех сил пытаюсь получить экземпляр 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 не может найти закрытый ключ из этого файла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...