MySQL OCP888题解031-使用X509加密连接

1、原题

1.1、英文原题

To satisfy a security requirement, you have created or altered some user accounts to include REQUIRE X509. Which additional task needs to be performed for those user accounts to fulfill the requirement to use X509?
A. Install the X509 plug-in on the server.
B. Set the X509 option in the [client] section of the MySQL server’s configuration file.
C. Restart the server with the --require-x509 option.
D. Distribute client digital certificates to the client computers computers being used to log in by the user accounts.
E. Provide users access to the server’s private key.

1.2、中文翻译

为了满足安全要求,您创建或更改了一些用户帐户,以包含REQUIRE X509。为了满足使用X509的要求,需要为这些用户帐户执行哪些附加任务?
A. 在服务器上安装X509插件。
B. 在MySQL服务器配置文件的[client]部分设置X509选项。
C. 使用–require-x509选项重新启动服务器。
D. 将客户端数字证书分发给用户帐户用于登录的客户端计算机。
E. 为用户提供对服务器私钥的访问。

1.3、答案

D

2、题目解析

2.1、题干解析

本题主要考察MySQL加密连接。

2.2、选项解析

  1. 一般只要使用OpenSSL编译的MySQL发行版默认支持加密连接(但不必须),所以不必安装什么插件,所以选项A错误。
  2. 服务器端配置X509的ssl-cert、ssl-key等选项并不在client部分,而是在mysqld部分,所以选项B错误。
  3. require-x509选项针对的是创建或修改账户,即时生效,不需要重启,所以选项C错误。
  4. 使用X509加密连接,是需要将服务器端的公钥、私钥和证书发送给客户端使用的,所以选项D正确。

3、知识点

3.1、知识点1:X509(X.509)

X.509 是密码学里公钥证书的格式标准。 X.509 证书己应用在包括TLS/SSL(WWW万维网安全浏览的基石)在内的众多 Internet协议里.同时它也用在很多非在线应用场景里,比如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名。

X.509证书就是基于国际电信联盟(ITU)制定的X.509标准的数字证书。X.509证书主要用于识别互联网通信和计算机网络中的身份,保护数据传输安全。X.509证书无处不在,比如我们每天使用的网站、移动应用程序、电子文档以及连接的设备等都有它的身影。基于X.509的PKI最常见的用例是使用SSL证书让网站与用户之间实现HTTPS安全浏览。X.509协议同样也适用于应用程序安全的代码签名、数字签名和其他重要的互联网协议。

X.509标准一共有三个版本。第一个版本在1988年发布,名为X.500;到1996年更新了版本,增加了多个扩展以适应网络发展要求;2019年定义了现在的标准版本,即X.509标准。

X.509证书的常见应用

  • TLS/SSL证书——确保Web服务器的安全
  • 数字签名和文档签名:能够利用PKI来验证签名者的身份,还能验证签名文档的完整性。
  • 代码签名:通过对应用程序、驱动程序或软件程序进行数字签名,帮助应用开发商为这些程序提供进一步的保护。通过代码签名,终端用户可以相信代码没有受到第三方的篡改和破坏。为了保障代码的安全性和可信度,代码签名证书提供了软件开发商的签名、公司名称和时间戳。
  • 电子邮件证书:电子邮件证书又叫做S/MIME邮件安全证书,可以验证电子邮件发件人身份并加密邮件内容,防止网络钓鱼攻击,保证邮件的真实性和完整性。
  • SSH密钥:SSH又叫做安全外壳协议,而SSH密钥是X.509证书的一种形式,它提供在安全外壳协议中使用的安全访问凭证。由于SSH协议广泛用于云服务、网络环境、文件传输工具和配置管理工具中的远程通信,因此大多数组织使用SSH密钥来验证身份并保护它们免遭误用和恶意攻击。
  • 数字身份:随着数据和应用程序从传统网络扩展到移动设备、公有云、私有云和物联网设备,身份认证变得越来越重要。数字证书不仅限于对设备进行身份验证,还可用于对人员、数据或应用程序进行身份验证。

参考文档
参考链接

3.2、知识点2:创建需要X509加密的账户(CREATE USER … REQUIRE X509)

当使用如下语句创建用户时:CREATE USER 'jeffrey'@'localhost' REQUIRE X509;,意味着要求使用该账户时出示有效的证书。具体的证书、发行者和主体并不重要,唯一的要求是,应该可以用其中一个CA证书来验证其签名。使用X.509证书总是意味着加密,也就不必再使用SSL选项。
对于REQUIRE X509的账户,客户端连接时必须指定–ssl-key和–ssl-cert选项来连接。(建议但不要求同时指定–ssl-ca,以便对服务器提供的公共证书进行验证。)
–ssl-key=file_name:ssl-key选项的值是客户端SSL私钥文件(PEM格式)的路径名称。
–ssl-cert=file_name:ssl-cert选项的值是客户端SSL公钥证书文件(PEM格式)的路径名称。

官方参考文档
官方参考文档
官方参考文档

3.3、知识点3:配置MySQL以使用加密连接

官方参考文档

3.3.1、加密连接的服务端配置

如下是一些与加密连接有关的配置:

  • 在服务器端,–ssl选项指定服务器允许但不必须使用加密的连接。这个选项是默认启用的,所以不需要明确指定。
  • 如果要求客户必须使用加密连接,需要启用require_secure_transport系统变量。
  • 在服务器端的如下系统变量指定了服务器在允许客户建立加密连接时使用的证书和密钥文件。
    • ssl_ca:证书颁发机构(CA)证书文件的路径名称。(ssl_capath类似,但指定CA证书文件目录的路径名)。
    • ssl_cert:服务器公钥证书文件的路径名称。该证书可以被发送到客户端,并根据其拥有的CA证书进行验证。
    • ssl_key:服务器私钥文件的路径名称。
    • 例如,要启用加密连接的服务器,在my.cnf文件中用这些行启动它,必要时改变文件名:
[mysqld]
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
- 例如,启用require_secure_transport系统变量来指定客户需要使用加密的连接。
[mysqld]
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
require_secure_transport=ON

服务器会执行证书和密钥文件的自动发现。如果服务器在数据目录中发现了名为ca.pem、server-cert.pem和server-key.pem的有效证书和密钥文件,它就会启用对客户端加密连接的支持。如果服务器在数据目录中没有找到有效的证书和密钥文件,它将继续执行,但不支持加密连接。

3.3.2、加密连接的客户端配置

如果在服务器端启用了require_secure_transport系统变量,则客户端必须使用加密连接,建立未加密连接会失败。
如果服务器端只是支持加密连接(默认情况下就是这样),并未做强制要求(服务器端没有启用require_secure_transport,客户端也没有使用–ssl-mode选项),则客户端会首先尝试使用加密连接,如果不能建立加密连接,则会退回到未加密连接。
可以在MySQL客户端通过–ssl-mode选项可以对加密连接的使用做进一步控制:

  • 如果–ssl-mode=REQUIRED,客户端要建立加密连接,未加密连接会失败。
  • 如果–ssl-mode=DISABLED,客户端就使用未加密连接。
  • 如果–ssl-mode=VERIFY_CA 或 --ssl-mode=VERIFY_IDENTITY,客户端需要建立加密连接,同时也对服务器CA证书进行验证,(如果使用VERIFY_IDENTITY)对其证书中的服务器主机名称进行验证。

客户端的选项用来确定客户端在与服务器建立加密连接时使用的证书和密钥文件,与服务器端使用的ssl_ca、ssl_cert和ssl_key系统变量类似,只不过在客户端–ssl-cert和–ssl-key标识的是客户端的公钥和私钥。

  • –ssl-ca:证书颁发机构(CA)证书文件的路径名称。如果使用这个选项,必须指定服务器使用的相同证书。
  • –ssl-cert。客户端公钥证书文件的路径名称。
  • –ssl-key: 客户端私钥文件的路径名。

对于用REQUIRE X509子句创建的账户,客户端必须至少指定–ssl-cert和–ssl-key。此外,建议使用 --ssl-ca (或 --ssl-capath),这样可以验证服务器提供的公共证书。例如:

mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem

3.3.3、检查客户端连接是否加密的方法

方法一:可以检查Ssl_cipher状态变量的会话值。如果该值为空,说明连接没有被加密。否则,连接是加密的,其值表示加密的密码。例如:

mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher';
+---------------+-----------------------------+
| Variable_name | Value                       |
+---------------+-----------------------------+
| Ssl_cipher    | ECDHE-RSA-AES128-GCM-SHA256 |

方法二:使用STATUS或\s命令并检查SSL行

mysql> \s
......
SSL:                    Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
......

4、实验

4.1、实验1

4.1.1、实验目的

演示MySQL服务器和客户端如何使用X509认证。

4.1.2、实验前准备

使用OpenSSL编译的MySQL发行版安装并运行的MySQL5.7。

4.1.3、实验步骤

  1. 确定当前MySQL使用的是OpenSSL编译的MySQL发行版
mysql> SHOW VARIABLES LIKE 'have_openssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
  1. 确定当前MySQL能自动生成证书
mysql> show variables like 'auto_generate_certs';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| auto_generate_certs | ON    |
  1. 到数据目录下查看证书文件:
vm171> cd /home/mysql
vm171> ls | grep pem
ca-key.pem
ca.pem
client-cert.pem
client-key.pem
private_key.pem
public_key.pem
server-cert.pem
server-key.pem
  1. 如果数据目录下没有这些文件也不要紧,重启mysql,即可重新生成。即使把这些文件删除,重启MySQL也会重新生成。

  2. 使用root用户创建一个新用户:

mysql> CREATE USER u2 IDENTIFIED BY '222222';
  1. 到其他服务器(vm121)上用新用户u2登录,发现可以登陆成功
vm121> mysql -h192.168.124.171 -uu2 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
......
  1. 到MySQL所在服务器(vm171)用root用户登录,将u2用户改为REQUIRE X509:
mysql> ALTER USER u2 REQUIRE X509;
  1. 到其他服务器(vm121)上用新用户u2登录,发现无法登陆了
vm121> mysql -h192.168.124.171 -uu2 -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'u2'@'192.168.124.121' (using password: YES)
  1. 到MySQL所在服务器(vm171),进入数据目录,将几个证书文件拷贝到vm121服务器上:
vm171> scp ca.pem root@192.168.124.121:/root/
vm171> scp client-key.pem root@192.168.124.121:/root/
vm171> scp client-cert.pem root@192.168.124.121:/root/
  1. 登录到vm121服务器,使用如下命令,发现可以登录成功了:
vm121> mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -h192.168.124.171 -uu2 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.

4.1.4、实验结论

  1. 使用OpenSSL编译的MySQL发行版默认会生成公钥、私钥和CA证书,默认启用加密连接(但不必须)。
  2. 如果通过CREATE/ALTER USER … REQUIRE X509的方式要求客户单使用加密连接,则客户端需要将公钥、私钥和CA证书拷贝到客户端所在机器,然后在客户端命令行选项中指定ssl-cert、ssl-key和ssl-ca的值即可使用加密连接。

5、总结

  1. 使用OpenSSL编译的MySQL发行版默认会生成公钥、私钥和CA证书,默认启用加密连接(但不必须)。
  2. 如果通过CREATE/ALTER USER … REQUIRE X509的方式要求客户单使用加密连接,则客户端需要将公钥、私钥和CA证书拷贝到客户端所在机器,然后在客户端命令行选项中指定ssl-cert、ssl-key和ssl-ca的值即可使用加密连接。
  3. X.509是公钥证书标准,TLS/SSL证书、数字签名和SSH密钥等都广泛使用了X.509标准。
  4. ssl-cert对应公钥文件路径,ssl-key对应私钥文件路径。
  5. 可以通过SHOW SESSION STATUS LIKE 'Ssl_cipher’查看连接是否做了加密。
  6. 使用X509加密连接,是需要将服务器端的公钥、私钥和证书发送给客户端使用的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值