27.7.14 C API 对加密连接的支持

本节介绍 C 应用程序如何使用 C API 功能进行加密连接。默认情况下,如果服务器支持加密连接,则 MySQL 程序会尝试使用加密进行连接;如果无法构建加密连接,则回退到未加密连接(请参见第 6.3.1 节“配置 MySQL 以使用加密连接”)。对于那些需要控制超出默认行为的应用程序的应用程序,如何构建加密连接,C API 提供了以下功能:

C 用于加密连接的 API 选项

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

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

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

  • MYSQL_OPT_SSL_CERT:Client 端公共密钥证书文件的路径名。

  • MYSQL_OPT_SSL_CIPHER:SSL 加密的允许密码列 table。

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

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

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

  • MYSQL_OPT_SSL_MODE:连接安全状态。

  • MYSQL_OPT_SSL_VERIFY_SERVER_CERT:是否对服务器证书的“公用名”值执行主机名身份验证。

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

mysql_ssl_set()可用作便利例程,它等效于一组mysql_options()调用,这些调用指定了证书和密钥文件,加密密码等。参见第 27.7.6.73 节“ mysql_ssl_set()”

加强加密连接

mysql_options()信息(例如 SSL 证书和密钥文件)的选项用于构建加密连接(如果可用),但不强制要求对获得的连接进行加密。要要求加密的连接,请使用以下技术:

  • 根据需要调用mysql_options(),以提供适当的 SSL 参数(证书和密钥文件,加密密码等)。

  • 调用mysql_options()以传递值为SSL_MODE_REQUIRED或限制性更强的选项值之一的MYSQL_OPT_SSL_MODE选项。

  • 呼叫mysql_real_connect()以连接到服务器。如果无法获得加密连接,则呼叫失败;否则,呼叫将失败。错误退出。

改善加密连接的安全性

为了获得相对于默认加密所提供的安全性更高的安全性,Client 端可以提供与服务器使用的证书相匹配的 CA 证书,并启用主机名身份验证。通过这种方式,服务器和 Client 端将他们的信任放在相同的 CA 证书中,并且 Client 端验证其连接的主机是否是预期的主机:

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

  • 要同时启用主机名身份验证,请调用mysql_options()以将值SSL_MODE_VERIFY_IDENTITY而不是SSL_MODE_VERIFY_CA传递给MYSQL_OPT_SSL_MODE选项。

Note

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

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