Я пытаюсь настроить SSL для REST API Kafka Connect (2.11-2.1.0).
Проблема
Я попробовал две конфигурации (рабочий конфиг):
- с
listeners.https.
префиксом
listeners=https://localhost:9000
listeners.https.ssl.keystore.location=/mypath/keystore.jks
listeners.https.ssl.keystore.password=mypassword
listeners.https.ssl.key.password=mypassword
- и без префикса
listeners.https.
listeners=https://localhost:9000
ssl.keystore.location=/mypath/keystore.jks
ssl.keystore.password=mypassword
ssl.key.password=mypassword
Обе конфигурации запускаются в порядке и показывают следующее исключение при попытке подключения к https://localhost:9000:
javax.net.ssl.SSLHandshakeException: no cipher suites in common
В журнале я вижу, что SslContextFactory был создан с любым хранилищем ключей, но с шифрами:
210824 ssl.SslContextFactory:350 DEBUG: Selected Protocols [TLSv1.2, TLSv1.1, TLSv1] of [SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2]
210824 ssl.SslContextFactory:351 DEBUG: Selected Ciphers [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, ...]
210824 component.AbstractLifeCycle:177 DEBUG: STARTED @10431ms SslContextFactory@42f8285e[provider=null,keyStore=null,trustStore=null]
Что я сделал
Поскольку я знаю, что пароль от хранилища ключей абсолютно правильный, я покопался в исходном коде и начал отлаживать.
Наконец, я обнаружил, что ни простые ssl.*
, ни префиксные listeners.https.ssl.*
конфигурации не принимаются во внимание, и получается, что в настоящее время нет возможности настроить SSL для Kafka Connect REST API.
Последовательность вызовов:
- RestServer.createConnector
- SSLUtils.createSslContextFactory
- AbstractConfig.valuesWithPrefixAllOrNothing
Последний способ является причиной неприятностей.
Если у нас есть listeners.https.
свойства, они не могут быть возвращены, потому что они отфильтрованы в строке 254 (поскольку WorkerConfig не содержит свойств с префиксом).
В противном случае, если у нас есть свойства без префикса ssl.
, они также не возвращаются, поскольку поле values
содержит только известные свойства из того же WorkerConfig (values
является результатом ConfigDef.parse ).
Я что-то упустил, и кто-нибудь успешно настроил SSL для kafka connect rest api?