Context
Используя Elixir и Brod (который использует модуль ssl
Эрланга), я пытаюсь подключиться к брокеру Kafka с поддержкой SSL.Это работает тогда и только тогда, когда закрытый ключ сертификата клиента не защищен паролем.
Сертификат создан с использованием openssl
:
$ openssl req -newkey rsa:2048 -sha256 -passout pass:test1234 -keyout client.key -out client.csr -days $DAYS -subj "$SUBJ"
$ openssl x509 -req -CA ca.crt -CAkey ca.key -in client.csr -out client.crt -days $DAYS -CAserial ca.sr
Я проверяю, что пароль установлен с помощью openssl rsa -noout -text -in certs/client.key
.
После этого client.key
выглядит следующим образом:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIttCU1ZmyY2ACAggA
...
6C/BxoJnc6SQODqj+eiZHsCTKQ==
-----END ENCRYPTED PRIVATE KEY-----
.. который, я полагаю, в формате PEM, подходит дляМодуль ssl
Эрланга.
Конфигурация
Брод передает параметры SSL вплоть до ssl:connect
Эрланга.Я передаю эти параметры (синтаксис Elixir):
[
certfile: "client.crt",
keyfile: "client.key",
password: String.to_charlist("test1234"),
cacertfile: "ca.crt"
]
Сообщение об ошибке
** (stop) {{{:failed_to_upgrade_to_ssl, {:keyfile, :function_clause}}, [{:brod_sock, :maybe_upgrade_to_ssl, 4, [file: 'src/brod_sock.erl', line: 278]}, {:brod_sock, :do_init, 4, [file: 'src/brod_sock.erl', line: 204]}, {:brod_sock, :init, 5, [file: 'src/brod_sock.erl', line: 176]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 247]}]}, [localhost: 9193]}
(brod) src/brod_client.erl:708: :brod_client.start_metadata_socket/5
(brod) src/brod_client.erl:301: :brod_client.handle_info/2
(stdlib) gen_server.erl:616: :gen_server.try_dispatch/4
(stdlib) gen_server.erl:686: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Согласно Интернет эта ошибка означает, что файл закрытого ключаневозможно проанализировать / загрузить / использовать.Я попытался использовать неправильный пароль, и это то же самое сообщение.Как отмечалось выше, при использовании секретного ключа, который не защищен паролем, он работает нормально.
Идеи
- Что-то не так с форматированием
client.key
? - Нужно ли указывать пароль по-другому?
В настоящее время изучаю источники OTP, но пока не повезло.