3.6.1 Поддержка защищённых соединений
В этом разделе описывается, как C-приложения используют возможности C API для защищённых соединений. По умолчанию программы MySQL пытаются подключиться с использованием шифрования, если сервер поддерживает защищённые соединения, переходя к незащищённому соединению, если защищённое создать не удаётся (см. ). Для приложений, которым требуется больший контроль над созданием защищённых соединений, чем по умолчанию, C API предоставляет следующие возможности:
Функция
mysql_options()позволяет приложениям задать соответствующие параметры SSL/TLS перед вызовомmysql_real_connect(). Например, чтобы потребовать использование защищённого соединения, см. Принудительное использование защищённого соединения.Функция
mysql_get_ssl_cipher()позволяет приложениям определить, использует ли соединение шифрование после его установления. ЗначениеNULLуказывает, что шифрование не используется. Значение, отличное отNULL, указывает на защищённое соединение и называет используемый шифр шифрования. См. Раздел 5.4.34, «mysql_get_ssl_cipher()».
Параметры защищённых соединений
mysql_options() предоставляет следующие параметры для управления использованием защищённых соединений. Подробности параметров см. в Разделе 5.4.50, «mysql_options()».
MYSQL_OPT_SSL_CA: Путь к файлу сертификата центра сертификации (CA). При использовании этого параметра необходимо указать тот же сертификат, что и у сервера.MYSQL_OPT_SSL_CAPATH: Путь к каталогу, содержащему файлы доверенных сертификатов SSL CA.MYSQL_OPT_SSL_CERT: Путь к файлу сертификата открытого ключа клиента.MYSQL_OPT_SSL_CIPHER: Список разрешённых шифров для шифрования SSL.MYSQL_OPT_SSL_CRL: Путь к файлу со списками отзыва сертификатов.MYSQL_OPT_SSL_CRLPATH: Путь к каталогу, содержащему файлы списков отзыва сертификатов.MYSQL_OPT_SSL_KEY: Путь к файлу закрытого ключа клиента.MYSQL_OPT_SSL_MODE: Состояние безопасности соединения.MYSQL_OPT_SSL_VERIFY_SERVER_CERT: Выполнять ли проверку идентификатора имени хоста значения имени общего наименования (Common Name) серверного сертификата.MYSQL_OPT_TLS_VERSION: Протоколы шифрования, разрешённые клиенту.
mysql_ssl_set() может использоваться как удобная функция, эквивалентная набору вызовов mysql_options(), задающих файлы сертификатов и ключей, шифры шифрования и т. д. См. Раздел 5.4.75, «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(или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 (см. ). Такие самозаверяющие сертификаты не содержат имя сервера в качестве значения имени общего наименования.
Проверка идентификатора имени хоста также не работает с сертификатами, в которых имя общего наименования указано с использованием подстановочных символов, поскольку это имя сравнивается буквально с именем сервера.
© 2025 Oracle
Licensed under the GPLv2 License.