将 SSL 证书添加到 mysql docker 容器

Posted

技术标签:

【中文标题】将 SSL 证书添加到 mysql docker 容器【英文标题】:Adding SSL certificates to a mysql docker container 【发布时间】:2017-04-21 05:36:14 【问题描述】:

我正在为一个使用 nginx 和 uwsgi 的 django 应用程序构建一个 docker 容器。对于数据库,应用程序正在使用 mysql,它位于不同的容器中,并且它们都与 docker-compose.yml 文件链接:

version: '2'
services:
    mysql:  
        image: mysql:latest
        environment:
            -MYSQL_DATABASE: TheDatabase
            -MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
            -MYSQL_USER: TheUsername
            -MYSQL_PASSWORD: ThePassword

        ports:
            -"3306:3306"

    django:
        build: .
        volumes:
            - .:/app
        ports:
            - "443:443"
            - "8000:8000"
        links:
            - mysql

我正在使用 SSL 证书,这些证书使用 OpenSSL 自签名并包含在 nginx.conf 文件中。问题是每次我运行容器并尝试以超级用户身份登录时,都会收到以下错误 504 Timed Out。经过大量思考后,我得出结论,问题出在与 mysql 数据库的连接上。我确实进入了 mysql 容器并看到数据库在那里,在检查表后,我看到所有表都已创建。但是,在阅读日志后,我注意到以下行:

[警告] 由于以下 SSL 库错误,无法设置 SSL:SSL 上下文在没有证书和私钥的情况下不可用。

当我使用来自 docker hub 的现成映像时,我应该如何添加 SSL 密钥和证书?这就是我收到 504 Timed out 错误的原因吗?我还收到以下 3 个警告:

[警告] 'db' 条目 'sys mysql.sys@localhost' 在 --skip-name-resolve 模式下被忽略。

[警告] 'proxies_priv' 条目 '@ root@localhost' 在 --skip-name-resolve 模式下被忽略。

[警告] 'tables_priv' 条目 'sys_config mysql.sys@localhost' 在 --skip-name-resolve 模式下被忽略

【问题讨论】:

【参考方案1】:

"如果您希望服务器能够自动支持部署 对于安全连接,请使用 mysql_ssl_rsa_setup 实用程序创建 默认 SSL 和 RSA 文件:

shell> mysql_ssl_rsa_setup

有关更多信息,请参阅第 4.4.5 节,“mysql_ssl_rsa_setup - 创建 SSL/RSA 文件”。

mysql_ssl_rsa_setup

只有 MySQL 企业版服务器会在 --initialize 时间为您创建证书。

Courtesy-MySQL

【讨论】:

以上是关于将 SSL 证书添加到 mysql docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Docker 容器中向 Tomcat 添加 SSL 证书?

倒腾HTTPSNginx for Docker自签名SSL证书

为 docker 中的 nginx 配置 https

如何将主题替代名称添加到 ssl 证书?

将 SSL 证书添加到 JRE 以访问 HTTPS 站点

Docker&Nginx-设置SSL