SSL 连接加密

最近更新时间:2019-04-16 12:23:52

说明:

该功能从2019年3月30日开始公测,公测期间仅对白名单用户开放。

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 连接加密

为了提高链路安全性,您可以在 MariaDB 控制台 左侧栏的【实例管理】>【数据安全】>【连接安全】中启用 SSL(Secure Sockets Layer)加密。

说明:

由于启用 SSL 加密依赖当前 SQL 引擎版本,如果 SQL 引擎不匹配,后台会先进行静默升级(静默升级优先确保现有连接和实例稳定影响,业务无感知升级过程,升级过程可能历时1 - 2小时或更长)。

内网链路相对较安全,通常无需对连接加密;由于 SSL 加密的固有缺陷,启用 SSL 加密会存在以下问题:

  • 部分客户端(含应用程序)需采用 SSL 连接加密模式。
  • 会显著增加 CPU 使用率,并根据通讯数据量大小线性增加。
  • 明显增加网络连接响应时间。

SSL 连接加密支持情况

目前以下数据库实例版本的“标准模式”支持 SSL 连接加密:

  • MariaDB 10.1、10.0
  • Percona 5.7、5.6

目前已经支持以下版本的安全协议:

  • TLS1.0
  • TLS1.1
  • TLS1.2(默认)

说明:

“标准模式”,又称为“无验证模式”,即客户端不需要向服务器端发送一个有效的 X.509 证书,即可启用 SSL 加密,这是因为数据库有账号口令认证,因此通常不需要证书认证。
当前仅支持通过 提交工单 方式开启“客户端证书模式”的加密。

连接启用连接加密的实例

MySQL/MariaDB 客户端

  • 方案一(取决于当前客户端默认配置):
    mysql -h9.30.17.168 -P24082  -utest -ptest123 
  • 方案二(显式指定加密协议):
    mysql -h9.30.17.168 -P24082  -utest -ptest123 --tls-version=TLSv1.2

直接选择【使用 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"