MySQL JDBC соединение с SSL не удается на уровне рукопожатия TLS - PullRequest
0 голосов
/ 12 марта 2019

Наш сервер MySQL настроен на прием только соединения с SSL-шифром DHE-RSA-AES256-GCM-SHA384.

Я использую java mysql-connector-java (8.0.15) и java 8 (openjdk версия "1.8.0_191") Среда выполнения OpenJDK (сборка 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12)

Когда я перечисляю доступные шифры с помощью приведенной ниже программы, я получаю TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 шифр в наличии.

Ниже приведена программа для перечисления доступных шифров https://confluence.atlassian.com/stashkb/files/679609085/679772359/1/1414093373406/Ciphers.java

Но когда я включаю режим отладки на ssl, я получаю Игнорирование неподдерживаемого набора шифров: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384.

и с сообщением ниже

состояние предстоящего рукопожатия: server_hello [2]

*** ClientHello, TLSv1.1 RandomCookie: GMT: 1535642319 байт = {168, 0, 213, 212, 68, 19, 189, 131, 12, 147, 76, 108, 65, 77, 56, 170, 35, 147, 119, 196, 102, 161, 241, 133, 49, 97, 153, 200} Идентификатор сессии: {} Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV] Методы сжатия: {0}

Здесь клиент начинает связь через TLSv1.1, когда сервер использует TLSv1.2

Я также заметил, что ExportControlled.java (пакет com.mysql.cj.protocol;) создает SSLContext как (строка 563)

try{
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(kms, tms.toArray(new TrustManager[tms.size()]), null);
        return sslContext;

    }

Пожалуйста, помогите мне понять, почему доступный шифр игнорируется и что я должен сделать, чтобы подключиться к серверу

1 Ответ

0 голосов
/ 22 марта 2019

Это очень просто, мне просто нужно было добавить параметр enabledTLSProtocols в jdbc url

Например: -

jdbc:mysql://<hostname>:3115/<schema>?enabledTLSProtocols=TLSv1.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...