Распределённая система Erlang с TLS
Основная цель — обеспечить использование TLS для распределённой системы Erlang между узлами с возможностью также подключаться к некоторым узлам через TCP. Использование TLS в распределённой системе повысит безопасность данных при их миграции между узлами.
В этом разделе описано, как включить TLS для распределённой системы, чтобы обеспечить дополнительную проверку и безопасность.
См. также: Использование TLS для распределённой системы Erlang
Создание сертификата
Для распределения данных с использованием TLS необходимо предоставить соответствующие сертификаты. В следующем примере (couch_dist.conf) сертификат cert.pem должен быть подписан доверенным корневым сертификатом, известным серверу, а файл erlserver.pem содержит «сертификат» и его «закрытый ключ».
[{server, [{cacertfile, "</absolute_path/to/ca-cert.pem>"}, {certfile, "</absolute_path/to/erlserver.pem>"}, {secure_renegotiate, true}, {verify, verify_peer}, {fail_if_no_peer_cert, true}]}, {client, [{cacertfile, "</absolute_path/to/ca-cert.pem>"}, {keyfile, "</absolute_path/to/key.pem>"}, {certfile, "</absolute_path/to/cert.pem>"}, {secure_renegotiate, true}, {verify, verify_peer}]}].
Для включения проверки можно использовать {verify, verify_peer}, но для проверки потребуются соответствующие сертификаты.
Пример создания сертификатов.
$ git clone https://github.com/rnewson/elixir-certs $ cd elixir-certs $ ./certs self-signed \ --out-cert ca-cert.pem --out-key ca-key.pem \ --template root-ca \ --subject "/CN=CouchDB Root CA" $./certs create-cert \ --issuer-cert ca-cert.pem --issuer-key ca-key.pem \ --out-cert cert.pem --out-key key.pem \ --template server \ --subject "/CN=<hostname>" $ cat key.pem cert.pem >erlserver.pemПримечание
Приведённые выше примеры не являются рекомендацией относительно конкретных сроков действия, размеров ключей или алгоритмов.
Если задан параметр
verify_peer, следует также указать параметрserver_name_indication.В OTP 26 параметр
{fail_if_no_peer_cert, true}следует использовать только на стороне сервера; в предыдущих версиях его можно указывать как на стороне сервера, так и на стороне клиента.При создании сертификатов убедитесь, что Common Name (FQDN) в сертификате CA и сертификате различаются. Кроме того, FQDN в сертификате должен совпадать с именем хоста.
Параметры конфигурации
Чтобы включить TLS для распределённой системы, задайте пользовательские параметры в vm.args.
# Don't forget to override the paths to point to your cert and conf file! -proto_dist couch -couch_dist no_tls \"clouseau@127.0.0.1\" -ssl_dist_optfile </absolute_path/to/couch_dist.conf>Примечание
Значение по умолчанию
no_tls—false. Если пользователь не задаёт флагno_tls, все узлы будут использоватьTCP.Чтобы обеспечить работу «search», обязательно задайте параметр
no_tlsдля узлаclouseau. По умолчанию это будет"clouseau@127.0.0.1".
Флаг no_tls может принимать следующие значения:
-
Использовать только
TLS, задать значениеfalse(по умолчанию), например:-couch_dist no_tls false
-
Использовать только
TCP, задать значениеtrue, например:-couch_dist no_tls true
-
Указать, что некоторые узлы используют
TCP, а остальные —TLS, например:# Specify node1 and node2 to use TCP, others use TLS -couch_dist no_tls '"node1@127.0.0.1"' -couch_dist no_tls \"node2@127.0.0.1\"
# Any nodes end with "@127.0.0.1" will use TCP, others use TLS -couch_dist no_tls \"*@127.0.0.1\"
Примечание
Звёздочка (*): соответствует последовательности из нуля или более вхождений регулярного выражения.
Вопросительный знак (?): соответствует нулю или одному вхождению регулярного выражения.
Подключение к Remsh
Запустите Erlang с удалённой оболочкой, подключённой к узлу.
-
Если узел использует
TCP:$ ./remsh
-
Если узел использует
TLS:$ ./remsh -t </absolute_path/to/couch_dist.conf>
Copyright © 2025 The Apache Software Foundation — Licensed under the Apache License 2.0
https://docs.couchdb.org/en/3.5.1/cluster/tls_erlang_distribution.html