6.9.1 Настройка аутентификации сервера
Аутентификация сервера с помощью проверки сертификата сервера включена, когда свойство подключения Connector/J sslMode установлено в значение VERIFY_CA или VERIFY_IDENTITY. Если sslMode не установлено, аутентификация сервера с помощью проверки сертификата сервера включена, когда оба устаревших свойства useSSL и verifyServerCertificate установлены в значение true.
Сертификаты, подписанные доверенным центром сертификации (ЦС). При включенной аутентификации сервера с помощью проверки сертификата сервера, если не заданы дополнительные настройки аутентификации сервера, Java проверяет сертификат сервера с использованием своих стандартных доверенных сертификатов ЦС, обычно из $JAVA_HOME/lib/security/cacerts.
Использование самозаверяющих сертификатов. Однако довольно часто сертификаты сервера MySQL бывают самозаверяющими или подписанными самозаверяющим сертификатом ЦС; автоматически сгенерированные сертификаты и ключи, созданные сервером MySQL, основаны на последнем варианте — сервер генерирует все необходимые ключи и самозаверяющий сертификат ЦС, который используется для подписи сертификатов сервера и клиента. Затем сервер настраивается на использование сертификата ЦС и сертификата сервера. Хотя файл сертификата клиента размещается в том же каталоге, он не используется сервером.
Для проверки сертификата сервера Connector/J должен иметь возможность прочитать сертификат, который его подписал, то есть сертификат сервера, подписавший сам себя, или самозаверяющий сертификат ЦС. Это можно сделать, либо импортировав сертификат (ca.pem или любой другой сертификат) в стандартный хранилище доверенных сертификатов Java (хотя изменение стандартного хранилища не рекомендуется), либо импортировав его в пользовательский файл хранилища доверенных сертификатов Java и соответствующим образом настроив драйвер Connector/J. Используйте утилиту keytool Java (обычно расположенную в подкаталоге bin вашей установки JDK или JRE) для импорта сертификатов сервера:
$> keytool -importcert -alias MySQLCACert -file ca.pem \
-keystore truststore -storepass mypassword
Укажите соответствующие аргументы для командных опций. Если файл хранилища доверенных сертификатов еще не существует, он будет создан; в противном случае сертификат будет добавлен в существующий файл. Взаимодействие с keytool выглядит следующим образом:
Owner: CN=MySQL_Server_8.4.0_Auto_Generated_CA_Certificate
Issuer: CN=MySQL_Server_8.4.0_Auto_Generated_CA_Certificate
Serial number: 1
Valid from: Thu Mar 07 11:37:33 WET 2024 until: Sun Mar 05 11:37:33 WET 2034
Certificate fingerprints:
SHA1: 43:12:0F:96:1A:09:1C:D2:5B:62:7A:2A:55:6C:62:6A:84:5F:78:E4
SHA256: 7D:86:18:FF:06:A7:DF:A7:7C:D0:07:AB:96:1A:51:FD:02:4F:32:BF:1C:51:35:42:27:81:53:0A:8F:D3:56:39
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
Extensions:
#1: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]
Trust this certificate? [no]: yes
Certificate was added to keystoreВывод команды показывает все подробности об импортированном сертификате. Убедитесь, что вы помните пароль, который вы указали. Также имейте в виду, что пароль необходимо ввести в виде обычного текста в вашем конфигурационном файле Connector/J или исходном коде приложения.
Следующим шагом является настройка Java или Connector/J для чтения только что созданного или изменённого хранилища доверенных сертификатов. Это можно сделать, используя один из следующих трех методов:
-
Использование аргументов командной строки Java:
-Djavax.net.ssl.trustStore=
path_to_truststore_file-Djavax.net.ssl.trustStorePassword=mypassword -
Установка системных свойств непосредственно в коде клиента:
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file"); System.setProperty("javax.net.ssl.trustStorePassword","mypassword"); -
Установка свойств подключения Connector/J:
trustCertificateKeyStoreUrl=file:
path_to_truststore_filetrustCertificateKeyStorePassword=mypassword
Обратите внимание, что при совместном использовании свойства подключения переопределяют значения, установленные другими двумя методами. Кроме того, значения, установленные с помощью свойств подключения, используются только для этого подключения, в то время как значения, установленные с помощью системных значений, используются для всех подключений (если не переопределены свойствами подключения). Установка свойства подключения fallbackToSystemTrustStore в значение false предотвращает отключение Connector/J от использования системного хранилища доверенных сертификатов, созданного вами с помощью метода (1) или (2), когда метод (3) не используется.
При вышеуказанной настройке и включенной аутентификации сервера все установленные подключения будут защищены SSL-шифрованием, при этом сервер будет проверен в процессе рукопожатия SSL, и клиент теперь может безопасно доверять серверу, к которому он подключается.
Для подключений по протоколу X-Protocol свойства подключения xdevapi.ssl-truststore, xdevapi.ssl-truststore-type, xdevapi.ssl-truststore-password и xdevapi.ssl-fallbackToSystemTrustStore задают настройки хранилища доверенных сертификатов, точно так же, как trustCertificateKeyStoreUrl, trustCertificateKeyStoreType, trustCertificateKeyStorePassword и fallbackToSystemTrustStore делают это для подключений по протоколу MySQL; если явно не установлены, xdevapi.ssl-truststore, xdevapi.ssl-truststore-type, xdevapi.ssl-truststore-password и xdevapi.ssl-fallbackToSystemTrustStore принимают значения trustCertificateKeyStoreUrl, trustCertificateKeyStoreType, trustCertificateKeyStorePassword и fallbackToSystemTrustStore соответственно.
Проверка идентификации службы. Помимо аутентификации сервера с помощью проверки сертификата сервера, когда sslMode установлено в VERIFY_IDENTITY, Connector/J также выполняет проверку идентификации имени хоста, проверяя, соответствует ли имя хоста, используемое для подключения, значению Common Name в сертификате сервера.
© 2025 Oracle
Licensed under the GPLv2 License.