【1】SSL简介
(1.1)SSL简介
安全一直是不可不重视的问题。目前MySQL这方面应大方向上技术手段都具备。如:网络链接,权限控制,key秘钥认证,数据加密脱敏 等方式。
综合考虑,虽然很多环境无法所有这些安全策略全部应用上,但在可控范围内尽量做到一定的防范实施。
其中SSL是属于加密连接方式,提供以下安全服务:
- 客户机和服务器之间的,通过使用公开密钥和对称密钥技术以达到信息保密。
- 信息完整性,确保SSL业务全部达到目的。应确保服务器和客户机之间的信息内容免受破坏。
- 双向认证,客户机和服务器相互识别的过程。它们的识别号用公开密钥编码,并在SSL握手时交换各自的识别号。
- 安全性服务对终端用户来讲做到尽可能透明。
(1.2)TLS OR SSL?
SSL(Secure Socket Layer 安全套接层):是基于 HTTPS 下的一个协议加密层,最初是由网景公司(Netscape)研发,后被 IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入(RFCRequest For Comments 请求注释),RFC 里包含了很多互联网技术的规范。
SSL(Secure Sockets Layer)是一种用于安全地传输数据的加密协议。在MySQL中,SSL可以用于加密客户端与服务器之间的通信,以防止数据被窃取或篡改。SSL通过以下方式实现数据的加密和身份验证:
- **加密通信**:SSL使用非对称加密和对称加密相结合的方式来加密通信。在连接建立阶段,服务器使用自己的私钥对公钥加密进行通信的对称加密密钥进行加密,然后将加密后的密钥发送给客户端。客户端使用私钥解密服务器发送的密钥,从而获取通信所使用的对称加密密钥。之后,客户端和服务器使用对称加密密钥对数据进行加密和解密。
- **身份验证**:SSL还用于验证服务器的身份。服务器使用数字证书来证明自己的身份。数字证书包含了服务器的公钥以及其他与服务器相关的信息,并由可信的第三方证书颁发机构(CA)签名。客户端在连接建立阶段会验证服务器的证书,以确保连接的安全性和合法性。
- **数据加密**:SSL使用对称加密和非对称加密相结合的方式来加密通信。在连接建立过程中,服务器使用私钥对公钥加密进行通信的对称加密密钥,然后将加密后的密钥发送给客户端。客户端使用私钥解密服务器发送的密钥,从而获取通信所使用的对称加密密钥。之后,客户端和服务器使用对称加密密钥对数据进行加密和解密。
起初是因为HTTP在传输数据时使用的是明文(虽然说 POST 提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL 是基于 HTTP 之下 TCP 之上的一个协议层,基于 HTTP 标准并对 TCP 传输数据时进行加密,所以 HTTPS 是 HTTP+SSL/TCP的简称。
由于 HTTPS 的推出受到了很多人的欢迎,在 SSL 更新到 3.0 时,IETF 对 SSL3.0 进行了标准化,并添加了少数机制(但是几乎和 SSL3.0无差异),标准化后的 IETF 更名为 TLS1.0(Transport Layer Security 安全传输层协议),可以说 TLS 就是 SSL 的新版本 3.1 。
TLS(Transport Layer Security):是更为安全的升级版 SSL。但 SSL 这一术语更为常用,实际上 MySQL 使用的就是 TLS 协议,而不是 SSL 协议。
(1.3)SSL证书
SSL安全证书是由权威认证机构颁发的,是CA机构将公钥和相关信息写入一个文件,CA机构用私钥对公钥和相关信息进行签名后,将签名信息也写入这个文件后生成的一个文件。
简单理解就是客户申请后,签发机构给一个唯一的文件,然后客户安装到服务器上进行使用,这个唯一的文件就是SSL证书。
备注:
X.509:是一种证书格式,对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。
OpenSSL 相当于SSL的一个实现,如果把SSL规范看成接口,那么OpenSSL则认为是接口的实现。
(1.4)SSL的安全问题
尽管SSL可以提供一定程度的安全保障,但它也存在一些安全问题。主要包括以下几点:
1、证书信任问题。SSL协议中使用的证书是由受信任的第三方CA机构颁发的,用来证明服务器的身份和合法性。但是,如果服务器使用的证书是自签名的、过期的或被吊销的,那么客户端就难以判断服务器的真实性,这就容易被中间人攻击。
2、算法安全问题。SSL协议使用的加密算法对于现代计算机来说已经不够安全,比如DES、RC4等算法,容易被黑客攻击破解。因此,SSL协议现在已经推荐使用AES算法等更安全的加密算法。
3、协议升级问题。SSL协议的早期版本存在一些安全漏洞,如SSL 2.0版本中存在Poodle漏洞、HeartBleed漏洞等。因此,MySQL用户需要及时升级SSL协议版本,避免被攻击。
4、性能问题。由于SSL协议需要进行加密和解密,因此在高并发服务器中,SSL协议会对服务器性能造成一定的影响。所以,在使用SSL协议时,需要根据具体应用场景选择合适的算法和配置参数,以兼顾安全性与性能。
【SSL握手过程】
(1)证书用处
1》证书的用处,要看下面SSL握手过程
├── ca-key.pem ├── ca.pem ├── client-cert.pem ├── client-key.pem ├── server-cert.pem └── server-key.pem
(2)密钥算法
对称密钥算法:数据加密和解密时使用相同的密钥。
非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的公钥,一个是由用户秘密保存的私钥。利用公钥(或私钥)加密的数据只能用相应的私钥(或公钥)才能解密。
与非对称密钥算法相比,对称密钥算法具有计算速度快的优点,通常用于对大量信息进行加密(如对所有报文加密);而非对称密钥算法,一般用于数字签名和对较少的信息进行加密。
注意:SSL/TLS 协议就是使用对称密钥算法进行数据加密,使用非对称密钥算法进行”对称密钥“的加密。其过程为:
- 上图中,Server端发送了公钥给客户端,私钥自己保存,这是非对称密钥算法中的公钥、私钥对;
- 客户端会创建一个密钥,这个就是对称加密算法中的密钥。然后用 Server 端的公钥对这个密钥加密,发送给 Server 端;
- Server 端收到客户端发送过来的加密过的密钥,使用自己的私钥进行解密,得到加密前的密钥;
- 接下来传输数据则使用“对称密钥”进加密和解密。
这个就是利用非对称密钥算法保证对称密钥本身的安全
(3)数字证书-如何保证公钥的真实性?
如果有攻击者伪造了 Server 端的公钥并发了客户端,客户端会访问到假网站被窃取信息。显然保证客户端收到的 Server 端的公钥是真实的,是保证整个加密连接可靠性的第一道防线。
数字证书由权威机构 CA(Certification Authority) 签发,签发过程为:
- 用户首先产生自己的密钥对,并将公钥及部分个人身份信息传送给 CA ;
- CA 核实用户身份(将执行一些必要的步骤,以确信请求确实由用户发送而来);
- CA 对用户的所有信息(公钥、所有者、有效期...)进行 Hash 计算,得到一个 Hash 值,然后再使用私钥对 Hash 值进行加密得到签名,就得到了数字证书。该证书包含:用户的公钥、所有者、有效期等信息,同时还附有CA的签名信息。
数字证书的验证流程:
- 客户端会使用同样的 Hash 算法获取该数字证书的 Hash 值 H1;
- 通常浏览器和操作系统中集成了 CA 证书(包含 CA 公钥、所有者),客户端取得这个CA证书,使用其中的 CA 公钥解密签名,得到一个 Hash 值 H2 ;
- 比较 H1 和 H2,如果值相同,则数字证书可信。
上述签发和验证流程见下图(参考自网络):
如果 CA 证书不在浏览器和操作系统的可信任区,这种 CA 证书通常被称为自签名 CA 证书(MySQL 自动生成的就是自签名证书,详见下文)。
要完成数字证书的验证,则必须事先将自签名 CA 证书放到客户端,并在客户端发起连接时指定这个 CA 证书文件;
或者事先将自签名 CA 证书导入到客户端的操作系统可信任区,这样在 TLS 握手过程中也能自动获取到这个 CA 证书。
另外:验证证书在 SSL/TLS 协议中不一定是必须的,比如 mysql 客户端只有指定 --ssl-mode=VERIFY_CA 或者 --ssl-mode=VERIFY_IDENTITY 时才验证 CA 证书。
如果 --ssl-mode=REQUIRED,则不验证 CA 证书,只要求 MySQL Server 端发送公钥给客户端,这就无法保证服务端公钥是真实属于 MySQL server 的。详细见下文。
【2】mysql ssl
(2.1)查看是否已经开启SSL
show variables like '%ssl%';
yes是已经打开了,如果是DISABLE则表示没有。
TLS查看:
(2.2)如何开启ssl
前提:没有开启ssl,没有生成证书 (一般mysql 5.7.5以上版本,以及8.0都会默认开启)
步骤1:关闭mysql
步骤2:使用 mysql_ssl_rsa_setup,生成证书
安装完成后:
[root mysql_data]# ll *.pem -rw------- 1 mysql mysql 1675 Jun 12 17:22 ca-key.pem #CA私钥 -rw-r--r-- 1 mysql mysql 1074 Jun 12 17:22 ca.pem #自签的CA证书,客户端连接也需要提供 -rw-r--r-- 1 mysql mysql 1078 Jun 12 17:22 client-cert.pem #客户端连接服务器端需要提供的证书文件 -rw------- 1 mysql mysql 1675 Jun 12 17:22 client-key.pem #客户端连接服务器端需要提供的私钥文件 -rw------- 1 mysql mysql 1675 Jun 12 17:22 private_key.pem #私钥/公钥对的私有成员 -rw-r--r-- 1 mysql mysql 451 Jun 12 17:22 public_key.pem #私钥/公钥对的共有成员 -rw-r--r-- 1 mysql mysql 1078 Jun 12 17:22 server-cert.pem #服务器端证书文件 -rw------- 1 mysql mysql 1675 Jun 12 17:22 server-key.pem #服务器端私钥文件
【参考文档】
https://www.jianshu.com/p/75b098430508
标签:加密,SSL,CA,ssl,密钥,mysql,客户端 From: https://www.cnblogs.com/gered/p/17600067.html