如果我的应用程序未启用 SSL,为什么连接到我在 Azure 中的 MySQL 服务器会失败?
Why does connection to my MySQL server in Azure fail if my app does not have SSL enabled?
当我尝试从未启用 SSL 的 app/client 连接到 Azure 中的 MySQL 服务器时出现连接失败。报错信息如下:
需要 SSL 连接。请指定 SSL 选项并重试。
连接到 Azure 中的 MySQL 服务器时是否必须使用 SSL?有什么办法可以绕过这个要求吗?
默认情况下,MySQL 的 Azure 数据库在您的服务器和客户端应用程序之间强制执行 SSL 连接,以防止 MITM(中间人)攻击。这样做是为了尽可能安全地连接到您的服务器。
虽然不推荐,但如果您的客户端应用程序不支持 SSL 连接,您可以选择禁用要求 SSL 连接到您的服务器。请检查 How to Configure SSL Connectivity for your MySQL server in Azure 了解更多详情。您可以从门户或使用 CLI 禁用要求 SSL 连接。请注意,Azure 不建议在连接到服务器时禁用要求 SSL 连接。
选项 1
在 "Azure Database for MySQL servers" 下的 Azure 门户中
1) 选择 MySql 服务器
2) 转到定价层 -> 强制 SSL 连接和 select 禁用选项 -> 保存
选项 2
1) 从 https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem 下载证书
2) 使用这些证书
连接到 MySql 服务器
mysql -h mydemoserver.mysql.database.azure.com -u Username@mydemoserver -p --ssl-ca=/opt/ssl/BaltimoreCyberTrustRoot.crt.pem
从 Docker 容器到 Azure MYSQL 通过 SSL 连接:
我的情况略有不同,但我写在这里是因为 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 connection is required. Please specify SSL options and retry.
我在 docker compose yml 文件中传递 DATABASE_SSL_CERT: /etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem
。
我了解到 pem 文件中的 \n
有时会被解释为 docker 环境变量中的其他内容。 \n
用notepad++打开每行都可以看到
我所做的修复是将 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
现在一切正常。
原因是 SSL 设置 在 MySQL 服务器
的 Azure 数据库设置中启用
您可以选择禁用它,如下所示:
- 转到“MySQL 服务器的 Azure 数据库”下的 Azure 门户
- 选择MySql服务器
- 转到“连接安全”菜单
- 转到“SSL 设置”部分
- 强制 SSL 连接和 select 禁用选项
- 单击页面顶部的“保存”按钮
虽然不推荐,
这是完整的细节 How to disable ssl
但简而言之。
选择“服务器参数”并为 require_secure_transport 搜索并将值设置为关闭。
您还可以按照提到的简单步骤配置 ssl here。
当我尝试从未启用 SSL 的 app/client 连接到 Azure 中的 MySQL 服务器时出现连接失败。报错信息如下:
需要 SSL 连接。请指定 SSL 选项并重试。
连接到 Azure 中的 MySQL 服务器时是否必须使用 SSL?有什么办法可以绕过这个要求吗?
默认情况下,MySQL 的 Azure 数据库在您的服务器和客户端应用程序之间强制执行 SSL 连接,以防止 MITM(中间人)攻击。这样做是为了尽可能安全地连接到您的服务器。
虽然不推荐,但如果您的客户端应用程序不支持 SSL 连接,您可以选择禁用要求 SSL 连接到您的服务器。请检查 How to Configure SSL Connectivity for your MySQL server in Azure 了解更多详情。您可以从门户或使用 CLI 禁用要求 SSL 连接。请注意,Azure 不建议在连接到服务器时禁用要求 SSL 连接。
选项 1 在 "Azure Database for MySQL servers" 下的 Azure 门户中 1) 选择 MySql 服务器 2) 转到定价层 -> 强制 SSL 连接和 select 禁用选项 -> 保存
选项 2 1) 从 https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem 下载证书 2) 使用这些证书
连接到 MySql 服务器mysql -h mydemoserver.mysql.database.azure.com -u Username@mydemoserver -p --ssl-ca=/opt/ssl/BaltimoreCyberTrustRoot.crt.pem
从 Docker 容器到 Azure MYSQL 通过 SSL 连接:
我的情况略有不同,但我写在这里是因为 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 connection is required. Please specify SSL options and retry.
我在 docker compose yml 文件中传递 DATABASE_SSL_CERT: /etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem
。
我了解到 pem 文件中的 \n
有时会被解释为 docker 环境变量中的其他内容。 \n
用notepad++打开每行都可以看到
我所做的修复是将 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
现在一切正常。
原因是 SSL 设置 在 MySQL 服务器
的 Azure 数据库设置中启用您可以选择禁用它,如下所示:
- 转到“MySQL 服务器的 Azure 数据库”下的 Azure 门户
- 选择MySql服务器
- 转到“连接安全”菜单
- 转到“SSL 设置”部分
- 强制 SSL 连接和 select 禁用选项
- 单击页面顶部的“保存”按钮
虽然不推荐, 这是完整的细节 How to disable ssl
但简而言之。 选择“服务器参数”并为 require_secure_transport 搜索并将值设置为关闭。
您还可以按照提到的简单步骤配置 ssl here。