身份认证插件
在使用客户端登录MySQL8.0 时,经常会遇到下面这个报错:
- mysql_native_password
- caching_sha2_password
安全连接 SSL (Secure Socket Layer)
为了更方便支持安全连接,从mysql 5.7.28开始使用 OpenSSL 编译的 MySQL 服务在启动时会自动生成缺失的 SSL 和 RSA 证书及密钥文件(在datadir目录下)。
服务器端配置
SSL 证书
在启动时,如果启用了 auto_generate_certs 系统变量,未指定除–ssl之外的SSL选项,并且数据目录中缺少服务器端SSL文件,则服务器会自动在数据目录中生成服务器端和客户端的SSL证书和密钥文件。
文件 | 描述 |
---|---|
server-cert.pem | 服务器端的SSL证书文件。它包含了服务器的公钥以及由可信的证书颁发机构(CA)签发的身份验证信息。客户端会用它来验证服务器的身份,确保正在与之通信的是预期的服务器。 |
server-key.pem | 服务器端的私钥文件。私钥必须保密,仅服务器知道。服务器使用它来解密客户端发送的加密数据,并对自己发送的数据进行加密。 |
client-cert.pem | 客户端的SSL证书文件。如果SSL通信要求双向认证(即服务器也需要验证客户端的身份),这个证书就包含了客户端的公钥和身份验证信息。 |
client-key.pem | 客户端的私钥文件。与服务器端的私钥类似,客户端的私钥也必须保密。客户端使用它来解密服务器发送的加密数据,并对自己发送的数据进行加密。 |
ca.pem | 证书颁发机构(CA)的根证书文件。它包含了CA的公钥,用于验证由该CA签发的所有证书的真实性。在SSL通信中,服务器和客户端都会使用这个根证书来验证对方的证书是否有效。 |
ca-key.pem | 证书颁发机构(CA)的私钥文件。CA使用这个私钥来对其签发的证书进行数字签名。这个文件必须非常安全,因为如果泄露,攻 击者可以伪造证书。 |
查看当前基础环境
客户端配置
-
使用未加密连接
-
显示使用加密连接
参数 值 说明 –ssl-mode PREFERRED 默认行为,client 端尝试使用加密进行连接,如果无法构建加密连接,则会退回到未加密的连接 REQUIRED Client 端需要加密连接,如果无法构建连接,则 Client 端将失败 DISABLED Client 端使用未加密的连接 VERIFY_CA Client 端需要加密连接,并且还对 CA 证书进行验证 VERIFY_IDENTITY Client 端需要加密的连接,并且还针对 CA 证书和其证书中的服务器主机名执行验证。主机名身份验证VERIFY_IDENTITY 不适用于由服务器自动创建或使用 mysql_ssl_rsa_setup 手动创建的自签名CA证书。
MySQL SSL 连接中的握手过程
- 客户端发起 ssl 连接请求;
- MySQL Server 发送数字证书 server-cert.pem 给客户端(server-cert.pem包含:服务器公钥、CA签名信息);
- 客户端使用CA 证书 ca.pem(由于这是 MySQL 自签名的CA证书,无法从操作系统的可信任区获取,所以事先必须在客户端本地保存 CA 证书文件)中的 CA 公钥解密 server-cert.pem 中的签名,进行验证;
- 验证通过后,生成对称密钥,使用 server-cert.pem 中的公钥加密“对称密钥”,发送给 MySQL Server;
- MySQL Server 使用自己保留的私钥 server-key.pem 解密,得到“对称密钥”;
- 接下来传输数据则使用“对称密钥”进加密和解密。
如果仅指定 --ssl-mode=REQUIRED,不指定 --ssl-mode=VERIFY_CA 或者 --ssl-mode=VERIFY_IDENTITY,则不需要步骤3。
强制客户端以加密方式登录
强制单独用户加密登录
RSA密钥对交换密码的非加密连接
RSA 证书
sha256_password_auto_generate_rsa_keys
or caching_sha2_password_auto_generate_rsa_keys
这两个系统变量是相关的,但它们控制的是自动生成RSA密钥对文件。
文件 | 变量 | 描述 |
---|---|---|
public_key.pem | caching_sha2_password_public_key_path | 公钥文件,它包含了公钥,可以被任何人获取和使用。公钥的主要作用是加密数据或验证数字签名。在公钥加密中,只有对应的私钥才能解密用公钥加密的数据。 |
private_key.pem | caching_sha2_password_private_key_path | 私钥文件,它包含了私钥,必须严格保密,只有密钥的所有者才能使用。私钥的主要作用是解密用公钥加密的数据或生成数字签名。 |
总结
变量 | 身份认证插件 | 说明 | |
---|---|---|---|
–ssl=ON | caching_sha2_password | 支持加密登录 <br />支持非加密登陆 | 可以通过mysql.sock以非加密方式登录<br />可以利用登录缓存以非加密方式登录<br />可以使用RSA方式登录 |
–ssl=ON<br />–require_secure_transport | caching_sha2_password | 强制客户端以加密方式登录 | 可以通过mysql.sock以非加密方式登录 |
–ssl=ON<br />–REQUIRE SSL | caching_sha2_password | 针对单独用户强制以加密方式登录 | 只能以加密方式登录<br />即使通过sock方式也只能以加密方式登录 |