Я видел много учебников о том, как вы можете стать вашим собственным центром сертификации (CA). Обучающие программы, которые я видел, посвящены тому, как генерировать ssl-ключи, а не ssh-ключи, поэтому мне было интересно, как мне сгенерировать ssh-ключи, подобные Ubuntu Server 14.04 LTS? Причина, по которой я хочу сделать это таким образом, заключается в том, что я могу лучше управлять ключами ssh и позволить мне отозвать их, если они покинут компанию, чтобы они больше не могли получить доступ к этому серверу.
2 ответа
У OpenSSH начиная с версии 5.4 были свои собственные действующие сертификаты. Они более просты по структуре, чем сертификаты X509, но имеют гораздо более простую функциональность.
Вы создаете обычную пару ключей ssh и используете ее как CA. Предпочтительно один хост CA и один пользователь CA. Затем вы можете подписать открытые ключи этим CA, используя ssh-keygen. Например
ssh-keygen -s /path/to/ca_key -I key_id -z serial \
-n principal1,principal2 -V +53w /path/to/user_key.pub
Эта команда создаст файл с именем user_key-cert.pub, который теперь является вашим сертификатом. Сертификат действителен в течение 53 недель и может быть использован для входа в систему как Principal1 и Principal2 на любом хосте, который доверяет CA, который подписал ключ.
Чтобы сказать sshd, что нужно доверять этому CA, просто обратитесь к ca_key.pub в sshd_config следующим образом
TrustedUserCAKeys /etc/ssh/ca_key.pub
Есть также несколько способов отозвать ssh-сертификаты (ваш актуальный вопрос), и они упоминаются в руководствах openssh. Но основной вариант в sshd_config - это RevokedKeys. Для этого вы можете использовать как текстовые файлы, так и двоичные KRL.
Для получения дополнительной информации я написал несколько руководств о центрах безопасности SSH https://framkant.org/2016/10/setting-up-a-ssh-certificate-authority-ca/
Для более детального и масштабируемого управления доступом, пожалуйста, посмотрите на:https://framkant.org/2017/07/scalable-access-control-using-openssh-certificates/
Ты не можешь. SSH не смотрит на CRL или что-то подобное, чтобы убедиться, что ключ все еще действителен. Если вы хотите иметь возможность легко удалить доступ к серверам для людей, которые покидают ваш магазин, я могу предложить два варианта:
- Не управлять ключами непосредственно, но управлять ими через что - то вроде марионетки (это имеет прямую поддержку для добавления и удаления отдельных клавиш в / из
authorized_keys
файла). Таким образом, у вас есть только одно место, где вам нужно добавить или удалить ключи SSH, и Puppet гарантирует, что изменения активируются на всех ваших хостах - Полностью отключите
PubKeyAuthentication
, переключитесь на что-то другое для аутентификации, которая имеет центральную систему аутентификации (например, Kerberos разрешает аутентификацию без пароля и имеет центральную базу данных аутентификации, но ее несколько сложно настроить для непосвященных).