本节介绍 C 应用程序如何使用 C API 功能进行加密连接。默认情况下,如果服务器支持加密连接,MySQL 程序会尝试使用加密连接,如果无法建立加密连接,则回退到未加密连接(请参阅 配置 MySQL 以使用加密连接)。对于需要控制加密连接建立方式的默认行为之外的应用程序,C API 提供了以下功能:
该
mysql_options()
函数使应用程序能够在调用之前设置适当的 SSL/TLS 选项mysql_real_connect()
。例如,要要求使用加密连接,请参阅 实施加密连接。该
mysql_get_ssl_cipher()
函数使应用程序能够在建立连接后确定连接是否使用加密。NULL
返回值表示未使用加密。非NULL
返回值表示加密连接并命名加密密码。参见 第 5.4.36 节,“mysql_get_ssl_cipher()”。
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
:客户端允许通过 TLSv1.2 使用 TLS 协议的连接的加密密码列表。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 证书和密钥文件等信息的选项用于建立加密连接(如果此类连接可用),但不强制要求对获得的连接进行加密。要要求加密连接,请使用以下技术:
必要时调用
mysql_options()
提供适当的 SSL 参数(证书和密钥文件、加密密码等)。调用
mysql_options()
以传递MYSQL_OPT_SSL_MODE
值为SSL_MODE_REQUIRED
或更严格的选项值之一的选项。调用
mysql_real_connect()
以连接到服务器。如果无法获得加密连接,则调用失败;错误退出。
为了相对于默认加密提供的额外安全性,客户端可以提供与服务器使用的证书相匹配的 CA 证书并启用主机名身份验证。通过这种方式,服务器和客户端信任同一个 CA 证书,并且客户端验证它连接到的主机是预期的主机:
要指定 CA 证书,请调用
mysql_options()
以传递MYSQL_OPT_SSL_CA
(orMYSQL_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 证书和密钥)。此类自签名证书不包含服务器名称作为 Common Name 值。
主机名身份验证也不适用于使用通配符指定通用名称的证书,因为该名称会逐字与服务器名称进行比较。