3.6.1 加密连接支持

本节介绍 C 应用程序如何使用 C API 的加密连接功能。默认情况下,MySQL 程序尝试使用加密进行连接,如果服务器支持加密连接,则回退到未加密连接(参见 配置 MySQL 使用加密连接)。对于需要控制加密连接建立方式的应用程序,C API 提供了以下功能

加密连接选项

mysql_options() 提供以下选项来控制加密连接的使用。有关选项的详细信息,请参见 第 5.4.54 节,“mysql_options()”

  • MYSQL_OPT_SSL_CA:证书颁发机构 (CA) 证书文件的路径名。如果使用此选项,则必须指定与服务器使用的证书相同的证书。

  • MYSQL_OPT_SSL_CAPATH:包含受信任 SSL CA 证书文件的目录的路径名。

  • MYSQL_OPT_SSL_CERT:客户端公钥证书文件的路径名。

  • MYSQL_OPT_SSL_CIPHER:客户端允许用于使用 TLS 协议(直至 TLSv1.2)的连接的加密密码列表。

  • MYSQL_OPT_SSL_CRL:包含证书吊销列表的文件的路径名。

  • MYSQL_OPT_SSL_CRLPATH:包含证书吊销列表文件的目录的路径名。

  • MYSQL_OPT_SSL_KEY:客户端私钥文件的路径名。

  • MYSQL_OPT_SSL_MODE:连接安全状态。

  • MYSQL_OPT_SSL_SESSION_DATA : 来自加密连接的序列化会话数据,该数据由对 mysql_get_ssl_session_data() 函数的调用在连接处于活动状态时返回。

  • MYSQL_OPT_TLS_CIPHERSUITES:客户端允许用于使用 TLSv1.3 的连接的加密密码套件列表。

  • MYSQL_OPT_TLS_VERSION:客户端允许的加密协议。

已弃用的 mysql_ssl_set() 函数可以用作便利例程,它等效于一组 mysql_options() 调用,这些调用指定证书和密钥文件、加密密码等等。参见 第 5.4.82 节,“mysql_ssl_set()”

强制加密连接

mysql_options() 用于 SSL 证书和密钥文件等信息的选项用于在可用时建立加密连接,但不要求获取的连接必须是加密的。要强制使用加密连接,请使用以下技术

  1. 根据需要调用 mysql_options(),提供相应的 SSL 参数(证书和密钥文件、加密密码等等)。

  2. 调用 mysql_options() 传递 MYSQL_OPT_SSL_MODE 选项,其值为 SSL_MODE_REQUIRED 或更严格的选项值之一。

  3. 调用 mysql_real_connect() 连接到服务器。如果无法获得加密连接,则调用失败;以错误退出。

提高加密连接的安全性

为了获得相对于默认加密提供的额外安全性,客户端可以提供与服务器使用的 CA 证书相匹配的 CA 证书并启用主机名身份验证。通过这种方式,服务器和客户端都信任相同的 CA 证书,客户端验证它连接到的主机是否为预期的主机

  • 要指定 CA 证书,请调用 mysql_options() 传递 MYSQL_OPT_SSL_CA(或 MYSQL_OPT_SSL_CAPATH)选项,并调用 mysql_options() 传递 MYSQL_OPT_SSL_MODE 选项,其值为 SSL_MODE_VERIFY_CA

  • 要启用主机名身份验证,请调用 mysql_options() 传递 MYSQL_OPT_SSL_MODE 选项,其值为 SSL_MODE_VERIFY_IDENTITY 而不是 SSL_MODE_VERIFY_CA

注意

使用 SSL_MODE_VERIFY_IDENTITY 的主机名身份验证不适用于由服务器自动创建的或使用 mysql_ssl_rsa_setup 手动创建的自签名证书(参见 使用 MySQL 创建 SSL 和 RSA 证书和密钥)。此类自签名证书不包含服务器名称作为通用名称值。

主机名身份验证也不适用于使用通配符指定通用名称的证书,因为该名称与服务器名称逐字比较。