Как создать простой SSH CA
Еще одна возможность защитить SSH-вход на ваш сервер - это проверка ключа хоста и ключа клиента с помощью центра сертификации (CA).
С помощью этой проверки можно войти на свой сервер, не копируя публичный ключ SSH в
Это означает, что выданные сертификаты могут быть ограничены по времени или отозваны досрочно. Это полезно, если многие серверы управляются несколькими пользователями.
В этом руководстве будет управляться только один сервер. Для больших настроек рекомендуется схема именования ключей хоста и ключей клиента.
Это руководство было протестировано с Ubuntu 20.04 и OpenSSH 8.3.
Предпосылки:
Создание пары ключей
Теперь пары ключей находятся в
Создать каталоги сертификатов: (необязательно)
Подписание ключа хоста
В этом руководстве это следующие файлы:
Чтобы сохранить
Добавив следующую строку в
Чтобы проверить и активировать изменения конфигурации, выполните следующие команды.
Для подписи этого ключа используйте следующую команду.
адресу
В этом руководстве он скопирован в
Может потребоваться настроить права доступа к файлам сертификата. Это возможно с помощью следующей команды.
В этом руководстве
Чтобы отозвать сертификат клиента, выполните следующую команду.
Для автоматического развертывания этой настройки конфигурации вы можете использовать Puppet или Ansible.
С помощью этой проверки можно войти на свой сервер, не копируя публичный ключ 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/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