ssl连接介绍(如何配置)
云基奔 • 2024-01-12 07:32:03 • 次
本文描述了如何配置您的服务器以将 SSL 用于 MySQL® 数据库连接。 保护 MySQL 连接后,恶意用户无法拦截您的 MySQL 流量。
重要:您必须拥有对客户端和主机服务器的 root 访问权限才能完成。
创建目录以存储 SSL 密钥
要创建将包含 SSL 密钥的目录,请执行以下步骤:
- 通过 SSH 登录到您的服务器。
- 创建一个 MySQL 可以访问的 SSL 密钥存储目录。 例如,运行 mkdir /mysql_keys 命令创建一个 mysql_keys 目录。
创建 SSL 密钥
注意:
- 在以下示例中,/mysql_keys 表示密钥存储目录。
- 客户端和服务器的证书和密钥的通用名称必须与 CA 证书的通用名称不同。 相同的通用名称将失败并显示类似于以下内容的错误:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
要创建 SSL 密钥,请执行以下步骤:
1 运行以下命令以创建证书颁发机构 (CA) 密钥:
openssl genrsa 2048 > /mysql_keys/ca-key.pem openssl req -sha1 -new -x509 -nodes -days 3650 -key /mysql_keys/ca-key.pem > /mysql_keys/ca-cert.pem
2 运行以下命令以创建服务器 SSL 密钥和证书:
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /mysql_keys/server-key.pem > /mysql_keys/server-req.pemopenssl x509 -sha1 -req -in /mysql_keys/server-req.pem -days 3650 -CA /mysql_keys/ca-cert.pem -CAkey /mysql_keys/ca-key.pem -set_serial 01 > /mysql_keys/server-cert.pemopenssl rsa -in /mysql_keys/server-key.pem -out /mysql_keys/server-key.pem
3 运行以下命令以创建客户端 SSL 密钥和证书:
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /mysql_keys/client-key.pem > /mysql_keys/client-req.pemopenssl x509 -sha1 -req -in /mysql_keys/client-req.pem -days 3650 -CA /mysql_keys/ca-cert.pem -CAkey /mysql_keys/ca-key.pem -set_serial 01 > /mysql_keys/client-cert.pemopenssl rsa -in /mysql_keys/client-key.pem -out /mysql_keys/client-key.pem
编辑 MySQL 配置
要编辑 MySQL 配置,请执行以下步骤:
1 使用您喜欢的文本编辑器打开 /etc/my.cnf 文件。
2 在 my.cnf 文件的 [mysqld] 部分插入以下行:
sslssl-cipher=DHE-RSA-AES256-SHAssl-ca=/mysql_keys/ca-cert.pemssl-cert=/mysql_keys/server-cert.pemssl-key=/mysql_keys/server-key.pem
3 在 my.cnf 文件的 [client] 部分插入以下行:
注意: 如果 [client] 部分不存在,则必须添加 [client] 部分。
[client] ssl-mode=REQUIRED ssl-cert=/mysql_keys/client-cert.pem ssl-key=/mysql_keys/client-key.pem
您更新的 my.cnf 文件应类似于以下示例:
[mysqld] max_connections=500 log-slow-queries max_allowed_packet=268435456 open_files_limit=10000 default-storage-engine=MyISAM innodb_file_per_table=1 performance-schema=0 ssl ssl-cipher=DHE-RSA-AES256-SHA ssl-ca=/mysql_keys/ca-cert.pem ssl-cert=/mysql_keys/server-cert.pem ssl-key=/mysql_keys/server-key.pem[client] ssl-mode=REQUIRED ssl-cert=/mysql_keys/client-cert.pem ssl-key=/mysql_keys/client-key.pem
- 如果服务器支持加密连接,则 ssl-mode=REQUIRED 设置将创建加密连接。 如果服务器无法创建加密连接,则连接将失败。
- MySQL 在 MySQL 5.7 中引入了 ssl-mode 设置。 如果您运行 MySQL 5.6 或更早版本,请将 ssl-mode=REQUIRED 替换为 ssl。
4 将更改保存到 /etc/my.cnf 文件并退出文本编辑器。
5 运行以下命令更新 /mysql_keys 目录及其文件的文件权限:
chown -Rf mysql. /mysql_keys
6 运行 /scripts/restartsrv_mysql 脚本重新启动 MySQL。
测试 SSL 配置
要测试 SSL 配置,请执行以下步骤:
1 要查看 MySQL 的活动 SSL 配置,请运行以下命令:
mysql -e "show variables like '%ssl%';"
输出将类似于以下示例:
+---------------+------------------------+ | Variable_name | Value | +---------------+------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /mysql_keys/ca-cert.pem | | ssl_capath | | | ssl_cert | /mysql_keys/server-cert.pem | | ssl_cipher | DHE-RSA-AES256-SHA | | ssl_key | /mysql_keys/server-key.pem | +---------------+------------------------+
2 要检查到 MySQL 的本地连接,请运行以下命令,其中 example 表示 cPanel 账户用户名:
mysql -u example -p
3 当系统提示时,输入 MySQL 用户账户密码。
4 连接后,运行 status 命令。 输出将类似于以下示例:
mysql> status -------------- mysql Ver 14.14 Distrib 5.5.42, for Linux (x86_64) using readline 5.1 Connection id: 19 Current database: Current user: example@localhost SSL: Cipher in use is DHE-RSA-AES256-SHA Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.42-cll MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 4 min 36 sec Threads: 1 Questions: 67 Slow queries: 0 Opens: 34 Flush tables: 1 Open tables: 27 Queries per second avg: 0.242 --------------
创建用户并允许远程访问
注意:这一步是可选的
要创建用户并允许远程访问,请执行以下步骤:
1 导航到 cPanel 的 MySQL 数据库界面(cPanel >> 主页 >> 数据库 >> MySQL 数据库)并创建您的数据库用户。
2 将远程服务器的 IP 地址添加到 WHM 的远程 MySQL 界面(cPanel >> 主页 >> 数据库 >> 远程 MySQL)。
3 在远程 MySQL 服务器上,创建一个 MySQL 可以访问的 SSL 密钥存储目录。 例如,使用 mkdir /mysql_keys 命令创建一个 mysql_keys 目录。
注意: 如果您已经在远程 MySQL 服务器上创建了 /mysql_keys 目录,则可以跳过此步骤。
4 将客户端 SSL 证书复制到远程 MySQL 服务器的 /mysql 目录。
5 在远程 MySQL 服务器上,使用首选文本编辑器打开 /etc/my.cnf 文件。
6 在 my.cnf 文件的 [client] 部分插入以下行:
[client] ssl-mode=REQUIRED ssl-cert=/mysql_keys/client-cert.pem ssl-key=/mysql_keys/client-key.pem
注意:如果 [client] 部分不存在,则必须添加该部分。
您更新的 /etc/my.cnf 文件应类似于以下示例:
[mysqld] max_connections=500 log-slow-queries max_allowed_packet=268435456 open_files_limit=10000 default-storage-engine=MyISAM innodb_file_per_table=1 performance-schema=0[client] ssl-mode=REQUIRED ssl-cert=/mysql_keys/client-cert.pem ssl-key=/mysql_keys/client-key.pem
注意:
- 如果服务器支持加密连接,则 ssl-mode=REQUIRED 设置将创建加密连接。 如果服务器无法创建加密连接,则连接将失败。
- MySQL 在 MySQL 5.7 中引入了 ssl-mode 设置。 如果您运行 MySQL 5.6 或更早版本,请将 ssl-mode=REQUIRED 替换为 ssl。
7 将更改保存到 /etc/my.cnf 文件并退出文本编辑器。
8 运行以下命令以更新 /mysql_keys 目录及其文件的权限:
chown -Rf mysql. /mysql_keys
9 重新启动 MySQL 服务器。
注意:如果远程 MySQL 服务器运行 cPanel & WHM,请使用 /scripts/restartsrv_mysql 脚本重新启动 MySQL。
测试远程 MySQL 连接
要测试远程 MySQL 连接,请执行以下步骤:
1 通过 SSH 登录远程 MySQL 服务器。
2 使用mysql命令远程连接MySQL服务器。 以下示例使用 IP 地址 192.168.0.1 作为目标 MySQL 服务器,示例使用 MySQL 用户:
mysql -u example -h 192.168.0.1 -p
mysql 命令会将您连接到远程 MySQL 服务器并请求 MySQL 用户密码。
3 连接到远程 MySQL 服务器后,输入 status 命令。 输出类似于以下示例:
mysql> status--------------mysql Ver 14.14 Distrib 5.5.42, for Linux (x86_64) using readline 5.1Connection id: 19Current database: Current user: example@localhostSSL: Cipher in use is DHE-RSA-AES256-SHACurrent pager: stdoutUsing outfile: ''Using delimiter: ;Server version: 5.5.42-cll MySQL Community Server (GPL)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: latin1Db characterset: latin1Client characterset: utf8Conn. characterset: utf8UNIX socket: /var/lib/mysql/mysql.sockUptime: 4 min 36 secThreads: 1 Questions: 67 Slow queries: 0 Opens: 34 Flush tables: 1 Open tables: 27 Queries per second avg: 0.242--------------
相关推荐
发表评论
