Создание центра сертификации
Начните с создания ЦС в вашем экземпляре администратора с помощью Consul CLI
$
consul tls ca create -domain example.org
==> Saved example.org-agent-ca.pem
==> Saved example.org-agent-ca-key.pem
Cоздайте набор сертификатов для ваших серверов Consul. Вы должны выбрать имя для своего центра обработки данных и домена, чтобы сертификаты назывались правильно.Используйте следующую команду, чтобы создать сертификат для каждого сервера. Имя файла увеличивается автоматически
$
consul tls cert create -server -dc dc1 -domain example.org
==> WARNING: Server Certificates grants authority to become a
server and access all state in the cluster including root keys
and all ACL tokens. Do not distribute them to production hosts
that are not server nodes. Store them as securely as CA keys.
==> Using example.org-agent-ca.pem and example.org-agent-ca-key.pem
==> Saved dc1-server-example.org-0.pem
==> Saved dc1-server-example.org-0-key.pem
Параметры команды:
-additional-dnsname=<string>
- Укажите дополнительное DNS-имя для альтернативных имен субъектов. localhost всегда включен. Этот флаг может быть указан несколько раз.
-additional-ipaddress=<string> - Укажите дополнительный IP-адрес для альтернативных имен субъектов. 127.0.0.1 всегда включен. Этот флаг может быть указан несколько раз.
-ca=<string> - Укажите путь к ок. По умолчанию #DOMAIN#-agent-ca.pem
-cli - Генерация сертификата CLI.
-client - Генерация клиентского сертификата
-days=<int> - Укажите количество дней, в течение которых сертификат действителен с этого момента. По умолчанию 1 год
-dc=<string> - Предоставить дата-центр. Имеет значение только для -server сертификатов. По умолчанию dc1
-domain=<string> - Укажите домен. Имеет значение только для -server сертификатов
-key=<string> - Укажите путь к ключу. По умолчанию #DOMAIN#-agent-ca-key.pem
-node=<string> - При создании сертификата сервера и его установке добавляется дополнительное DNS-имя формы
<node>.server.<datacenter>.<domain>
-server - Создать сертификат сервера
Агенты клиента Consul можно настроить двумя способами: с помощью автоматического шифрования или ручной настройки
АВТОШИФРОВАНИЕ
Рекомендуемый подход — использовать механизм автоматического шифрования, предоставляемый Consul, который автоматически генерирует клиентские сертификаты, используя ранее созданный сертификат CA <domain>-agent-ca.pem для включения TLS. Включается параметром auto-encrypt.
РУЧНАЯ НАСТРОЙКА
При ручной настройке создается пара сертификат/ключ для каждого клиентского агента Consul. Используйте следующую команду с -client флагом для создания клиентских сертификатов. Имя файла увеличивается автоматически.
$
consul tls cert create -client -dc <dc_name> -domain <domain_name>
==> Using <domain_name>-agent-ca.pem and <domain_name>-agent-ca-key.pem
==> Saved <dc_name>-client-<domain_name>-0.pem
==> Saved <dc_name>-client-<domain_name>-0-key.pem
Раздайте сертификаты агентам
Вы должны раздать сертификат CA consul-agent-ca.pem каждому из агентов Consul, а также сертификат для конкретного агента и закрытый ключ:
Если агент сервера, распространите файл CA, сертификат сервера и закрытый ключ сервера.
Если клиентский агент использует автоматическое шифрование, распространяйте только файл CA.
Если агент клиента использует ручную настройку, распространите файл CA, сертификат клиента и закрытый ключ клиента.
TLS-конфигурация
Для защиты связи RPC для клиентов Consul предлагает два различных подхода: механизм автоматического шифрования и ручную настройку
Пример конфигурации:
tls {
defaults {
key_file = "<Consul configuration directory>/certs/<server key>"
cert_file = "<Consul configuration directory>/certs/<server cert>"
ca_file = "<Consul configuration directory>/certs/<ca cert>"
verify_incoming = true
verify_outgoing = true
}
internal_rpc {
verify_server_hostname = true
}
}
auto_encrypt {
allow_tls = true
}
Пример конфигурации:
tls {
defaults {
ca_file = "<Consul configuration directory>/certs/consul-agent-ca.pem"
verify_incoming = true
verify_outgoing = true
}
internal_rpc {
verify_server_hostname = true
}
}
auto_encrypt {ё
tls = true
}
Пример конфигурации:
tls {
defaults {
ca_file = "<Consul configuration directory>/certs/consul-agent-ca.pem"
cert_file = "<Consul configuration directory>/certs/dc1-server-consul-0.pem"
key_file = "<Consul configuration directory>/certs/dc1-server-consul-0-key.pem"
verify_incoming = true
verify_outgoing = true
}
internal_rpc {
verify_server_hostname = true
}
}
auto_encrypt {
allow_tls = true
}
Пример конфигурации:
tls {
defaults {
ca_file = "<Consul configuration directory>/certs/consul-agent-ca.pem"
verify_incoming = true
verify_outgoing = true
}
internal_rpc {
verify_server_hostname = true
}
}
auto_encrypt {ё
tls = true
}
tls.defaults.ca_file - Указывает путь к файлу общедоступного сертификата ЦС.
tls.defaults.cert_file - Указывает путь к файлу общедоступного сертификата агента.
tls.defaults.key_file - Указывает путь к файлу закрытого ключа сертификата агента.
tls.defaults.verify_incoming - Если установлено значение true, Consul требует, чтобы все входящие соединения использовали TLS.
tls.defaults.verify_outgoing - Если установлено значение true, Consul требует, чтобы все исходящие подключения от этого агента использовали TLS.
tls.internal_rpc.verify_server_hostname - Если установлено значение true, Consul проверяет для всех исходящих соединений TLS, что сертификат TLS, представленный серверами, соответствует server
имени хоста.
Если вы используете собственный домен для DNS-запросов, domain также укажите это поле. Это должно совпадать с -domain флагами, которые использовались при создании учетных данных TLS