SSL 连接加密

最近更新时间:2024-05-15 15:45:51

我的收藏

SSL 连接加密简介

SSL 连接加密背景

当使用非加密方式连接数据库时,在网络中传输的所有信息都是明文,因此存在被非法用户窃听、篡改、冒充的三大风险;而 SSL/TLS 协议是为解决这三大风险而设计的,理论上可达到:
1. 所有信息都是加密传播,第三方无法窃听。
2. 具有校验机制,一旦被篡改,通信双方会立刻发现。
3. 配备身份证书,防止身份被冒充。

SSL 连接加密概述

SSL 协议要求建立在可靠的传输层协议(TCP)之上。SSL 协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP、FTP、TELNET 等)能透明地建立于 SSL 协议之上。SSL 协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用 SSL/TLS 协议传输数据的工作效率只有使用不使用协议传输的十分之一。假如为了安全保密,将一个数据库所有的数据通讯应用都启用 SSL 技术来加密,并使用 TLS 协议进行传输,那么该业务系统的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别。
SSL 加密并不保护数据本身,而是确保了来往于数据库和服务器之间的流量安全。从某个角度来看,由于企业内网天然的安全和隔离性,管理员通常可以放心内网传输安全,并在必须使用时再进行应用 SSL 连接加密。当然,通常建议管理员利用更合理的方法来应对企业内网的安全和隔离,而非仅仅依赖于 SSL 连接加密。

相关名词

SSL(Secure Sockets Layer):安全套接层,是一种安全协议,目的是为互联网通信提供安全及数据完整性保障,使用 X.509 认证。
TLS(Transport Layer Security):安全传输层,IETF 将 SSL 标准化后的产物。TLS 可以理解为 SSL 的升级版,TLS 目前有三个版本:TLS1.0、TLS1.1、TLS1.2,目前常用的为 TLS1.2,server 配置通常三个版本均支持。
X.509 标准:SSL 证书格式遵循 X.509 标准,X.509 是由国际电信联盟(ITU-T)制定的数字证书标准。X.509 给出的鉴别框架是一种基于公开密钥体制的鉴别业务密钥管理,即一个用户有两把密钥,公钥和私钥,同时该标准也规范了公开密钥认证、证书吊销列表、授权证书、证书路径验证算法等。
Openssl:一个开源的加密库,由 C 语言写成,SSL/TLS 协议基于该库进行的加解密。
认证机构CA(Certificate Authority):在 HTTPS 中是一个很重要的角色,通常称之为认证中心,从广义上讲,认证中心还应该包括证书申请注册机构 RA(Registration Authority),它是数字证书的申请注册、证书签发的管理机构。而在公司内网,通常也可以自己搭建认证服务器,发送证书,简称“自签发证书”。
公钥(Public-key):公共证书,由 CA 中心颁发的合法文件,可以在互联网传播。公钥证书文件的扩展名包括 crt、cer、key、der、pem、pem。公钥中包含颁发给哪个域名、公司名、加密算法、组织机构、有效期等信息。
私钥(private-key):即通常就叫所谓的私钥,私钥在生成 CSR 文件的时候同时生产,后缀通常为 .key,由使用者自己保管,不可在互联网传播,极其重要。

配置 SSL 连接加密

说明
SSL 连接加密仅为连接加密,不会对数据加密。
由于启用 SSL 加密依赖当前 SQL 引擎版本,如果 SQL 引擎不匹配,后台会先进行静默升级(静默升级优先确保现有连接和实例稳定影响,业务无感知升级过程,升级过程可能历时1 - 2小时或更长)。
内网链路相对较安全,通常无需对连接加密;由于 SSL 加密的固有缺陷,启用 SSL 加密会存在以下问题:
部分客户端(含应用程序)需采用 SSL 连接加密模式。
会显著增加 CPU 使用率,并根据通讯数据量大小线性增加。
明显增加网络连接响应时间。
您可以在 MariaDB 控制台 实例管理页的数据安全性 > 连接加密中关闭 SSL(Secure Sockets Layer)加密。

SSL 连接加密支持情况

目前已经支持以下版本的安全协议:
TLS1.0
TLS1.1
TLS1.2(默认)
说明
“标准模式”又称为“无验证模式”,即客户端不需要向服务器端发送一个有效的 X.509 证书,即可启用 SSL 加密,这是因为数据库有账号口令认证,因此通常不需要证书认证。

连接启用连接加密的实例

MySQL/MariaDB 客户端

使用 SSL 连接加密的方式连接数据库:
mysql -P 3306 -h 10.xx.xx.168 -u test -p --ssl
登录成功后,可以使用\\s命令查询当前登录状态:

其中SSL: Cipher in use is AES256-GCM-SHA384表示该用户是使用 SSL 连接至 MySQL 服务器。
直接选择使用 SSL,无需选择使用验证即可连接。



JDBC 等连接程序示例

如果实例开启 SSL 连接加密,但 JDBC&ODBC 没有配置 SSL 加密,业务会报 WARN 错误。
JDBC 连接串添加 useSSL 参数:

connection = DriverManager.getConnection("jdbc:mysql://ip:port/jsp_db?useSSL=true&verifyServerCertificate=false","root","123456");

也可以修改在 Properties 对象中设置 useSSL 的值:

properties.setProperty("useSSL", "true");

要显示指定使用 TLS1.2 协议,可以在启动 JVM 时传递下列选项:

-Djavax.net.debug=all -Djdk.tls.client.protocols="TLSv1.2" -Dhttps.protocols="TLSv1.2"