当我尝试从未启用 SSL 的应用程序/客户端连接到 Azure 中的 MySQL 服务器时,连接失败。错误信息如下:
需要 SSL 连接。请指定 SSL 选项并重试。
连接到 Azure 中的 MySQL 服务器时是否必须使用 SSL?有没有办法可以规避这个要求?
当我尝试从未启用 SSL 的应用程序/客户端连接到 Azure 中的 MySQL 服务器时,连接失败。错误信息如下:
需要 SSL 连接。请指定 SSL 选项并重试。
连接到 Azure 中的 MySQL 服务器时是否必须使用 SSL?有没有办法可以规避这个要求?
默认情况下,Azure Database for MySQL 在服务器和客户端应用程序之间强制实施 SSL 连接,以防止 MITM(中间人)攻击。这样做是为了尽可能安全地连接到您的服务器。
虽然不推荐,但如果您的客户端应用程序不支持 SSL 连接,您可以选择禁用要求 SSL 连接到您的服务器。请查看如何在 Azure 中为您的 MySQL 服务器配置 SSL 连接以获取更多详细信息。您可以从门户或使用 CLI 禁用要求 SSL 连接。请注意,Azure 不建议在连接到服务器时禁用要求 SSL 连接。
选项 1 在 Azure 门户中的“Azure Database for MySQL 服务器”下 1) 选择 MySql 服务器 2) 转到定价层 -> 强制 SSL 连接并选择 DISABLED 选项 -> 保存
选项 2 1) 从https://www.digicert.com/CACerts/BaltimoreCyber TrustRoot.crt.pem 下载证书 2) 使用这些证书连接到 MySql 服务器
mysql -h mydemoserver.mysql.database.azure.com -u Username@mydemoserver -p --ssl-ca=/opt/ssl/BaltimoreCyberTrustRoot.crt.pem
通过 SSL 从 Docker 容器到 Azure MYSQL 连接:
我的情况略有不同,但我在这里写它是因为 azure 文档https://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl并没有详细说明应用程序如何与来自 docker 容器的 MYSQL。
在我的例子中,我使用 docker 容器连接到 Azure MYSQL。我在我的 MYSQL 服务器上启用了 SSL 设置,并使用 sql workbench 验证了连接,我能够使用BaltimoreCyberTrustRoot.crt.pem
SSL 从本地连接它。但我的应用程序抛出错误消息 -
需要 SSL 连接。请指定 SSL 选项并重试。
DATABASE_SSL_CERT: /etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem
我在我的 docker compose yml 文件中传递了。
我知道\n
pem 文件中有时会在 docker 环境变量中被解释为其他内容。\n
如果您在记事本++中打开,则可以在每一行中看到
我做了什么来解决这个问题,我将 pem 文件转换为 base64 并在 yml 文件中进行了更新。就像是 -
DATABASE_SSL_CA: LS0tLS1CRUdJTiBDRVJUSUZ...=
在某些情况下,它还
DATABASE_SSL_ENABLE: "true"
需要强制 SSL 连接到 MYSQL。
我的新 yml 看起来像 -
version: "2.2"
services:
redis:
image: redis:3.2.6
ckeditor-cs:
image: docker.cke-cs.com/cs:3.9.1
depends_on:
- redis
ports:
- "8000:8000"
restart: always
init: true
environment:
DATABASE_DRIVER: mysql
DATABASE_HOST: efg.mysql.database.azure.com
DATABASE_USER: user@db
DATABASE_PASSWORD: PASS
DATABASE_PORT: 3306
DATABASE_SSL_CA: LS0tLS1CRUdJTiB............S0=
DATABASE_SSL_ENABLE: "true"
REDIS_HOST: redis
ENVIRONMENTS_MANAGEMENT_SECRET_KEY: ABC
LICENSE_KEY: XYZ
volumes:
- ~/ckeditor-cloudservice/easyimage_files:/var/cs/easyimage
现在一切都按预期工作。