注:mysql是安装在docker容器下的,操作系统是centos7
参考博文 https://www.cnblogs.com/505donkey/p/17983120
本人第一次接触这个,有错误的请指教,因为人手问题被赶鸭子上架了
生成CA私钥
openssl genrsa 2048 > ca-key.pem
【参数说明】
- genrsa:OpenSSL子命令,用于生成RSA私钥。
- 2048:表示生成的RSA私钥的位数,2048位的RSA私钥目前被认为是安全的
生成CA证书
该证书可以用于SSL/TLS服务器的身份验证,或者用于创建其他的证书。
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca-cert.pem
【参数说明】
- req:OpenSSL子命令,用于处理证书签名请求(CSR)。
- -new:生成一个新的证书签名请求。
- -x509:生成一个自签名的X.509证书,而不是一个证书签名请求(X.509证书是一种公钥证书,广泛用于TLS和SSL协议)。
- -nodes:不对生成的私钥进行加密,如果没有这个选项,OpenSSL会要求提供一个密码来加密私钥。
- -days:设置证书的有效期,单位是天,以上表示证书的有效期是3650天。
- -key:指定用于签名新证书的私钥文件。
- -out:指定输出文件的名称。
【我的填写记录】
- Country Name (2 letter code) [XX]:CN
- State or Province Name (full name) []:SH
- Locality Name (eg, city) [Default City]:SH
- Organization Name (eg, company) [Default Company Ltd]:FZY
- Organizational Unit Name (eg, section) []:FZY
- Common Name (eg, your name or your server's hostname) []:此处不要填写直接回车,至于为啥我也不知道
- Email Address []:未填写,直接回车
创建服务端的私钥,请求及证书
生成服务端私钥
openssl genrsa 2048 > server-key.pem
生成服务端证书签名请求
openssl req -new -days 3650 -nodes -key server-key.pem -out server-req.pem
【注意】:填写信息和以上一样,以下填写修改为服务器ip地址
Common Name (eg, your name or your server's hostname) []:你的服务器ip
生成服务端证书
openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
【参数说明】
- x509:OpenSSL子命令,用于处理X.509证书,X.509证书是一种公钥证书,广泛用于TLS和SSL协议。
- -req:表示openssl期望输入的是一个证书签名请求,即CSR。
- -in:用于指定输入文件,这里表示期望的CSR位于 server-req.pem 文件中。
- -CA:指定CA(证书颁发机构)的公钥证书。
- -CAkey:指定CA的私钥文件,两者结合使用来签发新的证书。
- -set_serial:表示设置证书的序列号为01
创建客户端的私钥,请求及证书
openssl genrsa 2048 > client-key.pem
openssl req -new -days 3650 -nodes -key client-key.pem -out client-req.pem
【注意】:填写信息和以上一样,以下填写修改为服务器ip地址
Common Name (eg, your name or your server's hostname) []:你的mysql登录账户
生成客户端证书
openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
以下命令执行完成后显示ok表示证书成功,否则重新执行一下吧,把原来生成的删掉
openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
启用ssl配置
ssl-ca=/mysql实际数据目录/mysql_kyes/ca-cert.pem
ssl-cert=/mysql实际数据目录/mysql_kyes/server-cert.pem
ssl-key=/mysql实际数据目录/mysql_kyes/server-key.pem
配置完成后重启mysql服务,我的是docker就直接重启docker了(因为我的docker里面无法使用vim、vi是先把docker文件复制到宿主机下面然后修改后重新复制到docker容器下原来的位置)一下参考
把文件复制到宿主机
docker cp mysql:/etc/mysql/ssh/my.cnf /etc/mysql/ssh/my.cnf
宿主机文件复制到docker容器指定目录
docker cp /etc/my.cnf mysql:/etc/my.cnf
mysql是我的容器名称
重启容器
docker restart mysql
进入容器
docker exec -it mysql /bin/bash
而后登录mysql进行验证
验证是否成功开启加密传输
在MySQL中,启用加密传输通常是通过配置my.cnf(或my.ini在Windows上)文件中的ssl和ssl-ca等选项来实现的。
要检查MySQL是否已成功启用了加密传输,可以使用以下方法:
使用mysql客户端连接到数据库,并运行SHOW VARIABLES LIKE 'have_openssl';查询。如果返回YES,则表示MySQL支持OpenSSL,并且可以配置SSL。我这里是没有这个属性的不知道为什么,但是后面执行的都ok
使用SHOW STATUS LIKE 'Ssl_cipher';查询来检查正在使用的加密算法。如果返回了一个加密算法的列表,则表示SSL已经在使用中。
使用SHOW VARIABLES LIKE 'ssl_ca';查询来检查是否已经指定了CA证书文件。如果返回了文件路径,则表示已经指定了CA证书。
使用SHOW VARIABLES LIKE 'ssl_cert';和SHOW VARIABLES LIKE 'ssl_key';查询来检查是否已经指定了服务器的SSL证书和私钥。
如果以上任一步检查返回了期望的结果,则可以认为MySQL启用加密传输成功。
以下是一个简单的命令行示例,用于检查加密传输是否已启用:
mysql -u yourusername -p -h yourhost -e "SHOW VARIABLES LIKE 'have_openssl';"
mysql -u yourusername -p -h yourhost -e "SHOW STATUS LIKE 'Ssl_cipher';"
mysql -u yourusername -p -h yourhost -e "SHOW VARIABLES LIKE 'ssl_ca';"
mysql -u yourusername -p -h yourhost -e "SHOW VARIABLES LIKE 'ssl_cert';"
mysql -u yourusername -p -h yourhost -e "SHOW VARIABLES LIKE 'ssl_key';"
请将yourusername、yourhost替换为实际的用户名和主机地址。运行这些命令后,检查返回结果以确认加密传输是否已配置并运行。