Как создать простой SSH CA

Еще одна возможность защитить SSH-вход на ваш сервер - это проверка ключа хоста и ключа клиента с помощью центра сертификации (CA).
С помощью этой проверки можно войти на свой сервер, не копируя публичный ключ SSH в ~/.ssh/authorized_keysфайл.
Это означает, что выданные сертификаты могут быть ограничены по времени или отозваны досрочно. Это полезно, если многие серверы управляются несколькими пользователями.
В этом руководстве будет управляться только один сервер. Для больших настроек рекомендуется схема именования ключей хоста и ключей клиента.
Это руководство было протестировано с Ubuntu 20.04 и OpenSSH 8.3.
Предпосылки:

CA

  • Ключ CA (Пользователь): ~/.ssh/ca_user_key
  • Ключ CA (хосты): ~/.ssh/ca_host_key

Сервер (должен доверять ЦС)

  • Имя пользователя: holu,root
  • FQDN: host.example.com
  • sshd конфигурация: /etc/ssh/sshd_config
  • ключ хоста: /etc/ssh/ssh_host_ed25519_key.pub
  • сертификат хоста: /etc/ssh/ssh_host_ed25519_key-cert.pub

Клиент (должен иметь возможность войти на holu@host.example.com через сертификат)

  • Пользователь: client
  • Ключ пользователя SSH: /home/client/.ssh/id_ed25519
  • сертификат клиента: /home/client/.ssh/id_ed25519-cert.pub

Шаг 1 - создайте SSH CA

На этом шаге показано, как создать простые пары ключей для центра сертификации. Эти пары ключей используются только для подписи сертификатов пользователей и сертификатов хоста.
Создание пары ключей
SSH keygen -f ~/.ssh/ca_user_key -t ed25519 && SSH keygen -f ~/.ssh/ca_host_key -t ed25519
Теперь пары ключей находятся в ~/.ssh/.

Шаг 2 - Подписание ключей хоста

Теперь ключ хоста сервера должен быть подписан расширением ca_host_key. Для ясности лучше сохранять сертификаты хоста и сертификаты клиентов в отдельных каталогах.
Создать каталоги сертификатов: (необязательно)
mkdir ~/.ssh/clients ~/.ssh/hosts
Подписание ключа хоста /etc/ssh/ssh_host_ed25519_key.pub.
SSH keygen -s ~/.ssh/ca_host_key -I example_host_ID -n host.example.com -V +52w /etc/ssh/ssh_host_ed25519_key.pub
  • -s: ключ CA
  • -I: HostID для сертификата хоста
  • -n: принципал содержит IP и / или полное доменное имя этого сервера
  • -V: срок действия сертификата
Теперь необходимо подписать открытый ключ хоста ca_host_key. Если это было успешно, вы должны найти сертификат хоста в /etc/ssh/ssh_host_ed25519_key-cert.pub.

Шаг 2.1 - Установка сертификата хоста

ca_user_key.pubНеобходимо установить сертификат хоста и открытый ключ хоста CA.
В этом руководстве это следующие файлы: /etc/ssh/ssh_host_ed25519_key-cert.pub&~/.ssh/ca_user_key.pub
Чтобы сохранить sshdконфигурацию чистой, в этом руководстве создается дополнительный файл конфигурации /etc/ssh/sshd_config.d/certificate.conf.
Добавив следующую строку в sshdконфигурацию (если она недоступна), эта дополнительная конфигурация будет включена.
Include /etc/ssh/sshd_config.d/*.conf
echo "TrustedUserCAKeys ~/.ssh/ca_user_key.pub" > /etc/ssh/sshd_config.d/certificate.conf
echo "HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub" >> /etc/ssh/sshd_config.d/certificate.conf
Чтобы проверить и активировать изменения конфигурации, выполните следующие команды.
sshd -T -f /etc/ssh/sshd_config
systemctl restart sshd

Шаг 3 - Подписание клиентских ключей

Теперь необходимо подписать общедоступный пользовательский ключ SSH для клиента. В этом руководстве ключ копируется в ~/.ssh/clients/.
Для подписи этого ключа используйте следующую команду.
SSH keygen -s ~/.ssh/ca_user_key -I example_client -n holu -V +10h ~/.ssh/clients/id_ed25519.pub
  • -I: ClientID для сертификата
  • -n: этот параметр определяет, какие имена пользователей клиент может использовать для входа на хост.
Теперь общедоступный пользовательский ключ SSH должен быть подписан с помощью пользовательского ключа CA. Если это было успешно, вы должны найти сертификат клиента по
адресу ~/.ssh/clients/id_ed25519-cert.pub.

Шаг 3.1 - Установка клиентского сертификата на стороне клиента

Теперь клиентский сертификат необходимо скопировать на клиентский компьютер.
В этом руководстве он скопирован в /home/client/.ssh/id_ed25519-cert.pub.
Может потребоваться настроить права доступа к файлам сертификата. Это возможно с помощью следующей команды.
sudo chown client:client /home/client/.ssh/id_ed25519-cert.pub

Шаг 4. Отзовите сертификаты вручную (необязательно)

Чтобы отозвать сертификаты вручную, вам необходимо создать revoked_keysфайл и изменить sshdконфигурацию.
В этом руководстве revoked_keysфайл находится в/etc/ssh/revoked_keys.d/
mkdir /etc/ssh/revoked_keys.d && touch /etc/ssh/revoked_keys.d/revoked_keys
echo "RevokedKeys /etc/ssh/revoked_keys.d/revoked_keys" >> /etc/ssh/sshd_config.d/certificate.conf
sshdКонфигурация должна быть испытана и активировали , как показано на шаге 2.
Чтобы отозвать сертификат клиента, выполните следующую команду.
SSH keygen -k -u -f /etc/ssh/revoked_keys.d/revoked_keys ~/.ssh/clients/id_ed25519.pub

Заключение

Стандартная комплектация закончена. Теперь клиент может войти на хост, используя сертификат и клиентский SSH-ключ.
Для автоматического развертывания этой настройки конфигурации вы можете использовать Puppet или Ansible.

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своем руководстве.

Комментариев 0