Назад | Перейти на главную страницу

Указание нескольких подписанных SSH сертификатов для одного файла идентификации

Я хочу реализовать подписанные сертификаты для аутентификации SSH. Я выполнил шаги Вот и сейчас пытаюсь понять, как я собираюсь реализовать это в своих системах.

Например, у нас есть две среды: производственная и тестовая; каждый со своим собственным «пользовательским ключом» для подписи других ключей. Я хочу иметь возможность контролировать, кто может получить доступ к каждой среде, но неудобство, с которым я сталкиваюсь, позволяет одному пользователю получить доступ к обеим средам с одним и тем же закрытым ключом.

На странице руководства ssh в разделе -i identity_file:

ssh также попытается загрузить информацию о сертификате из имени файла, полученного путем добавления -cert.pub к именам файлов идентификаторов.

Похоже, это подразумевает, что мне нужно было бы иметь несколько копий закрытого ключа (только что названного по-другому) и соответствующим образом назвать файл сертификата в дополнение к добавлению записи файла .ssh / config, чтобы он использовал правильный сертификат.

Насколько я понимаю, если вы укажете несколько записей IdentityFile в .ssh / config, ssh попробует каждую из них. Однако, похоже, нет возможности (по крайней мере, я не могу найти в документации) указать сертификат.

Есть ли способ указать файл сертификата (отличный от предполагаемого -cert.pub) в .ssh / config или файл, содержащий список сертификатов для проверки?

Следующее работает для меня на Debian Stretch с OpenSSH 7.4p1:

Поместите каждый сертификат в отдельный файл, например:

~/.ssh/id_ed25519-cert-ca1.pub
~/.ssh/id_ed25519-cert-ca2.pub

Затем укажите файлы сертификатов в ~ / .ssh / config:

CertificateFile ~/.ssh/id_ed25519-cert-ca1.pub
CertificateFile ~/.ssh/id_ed25519-cert-ca2.pub

Теперь команда ssh должна автоматически попытаться выбрать правильный сертификат.

От человека ssh_config:

В файлах конфигурации можно указать несколько файлов сертификатов; эти сертификаты будут проверяться последовательно. Несколько директив CertificateFile добавят в список сертификатов, используемых для аутентификации.

Я не знаю хорошо способ сделать это, но я знаю два способа.

  1. Кажется, что ssh-agent совершенно счастлив хранить несколько сертификатов для одной личности. Так что если у вас, например, id_ed25519 как ваш идентификатор и id_ed25519-cert1.pub и id_ed25519-cert2.pub, ты можешь сделать это:

    cp id_ed25519-cert1.pub id_ed25519-cert.pub
    ssh-add id_ed25519
    cp id_ed25519-cert2.pub id_ed25519-cert.pub
    ssh-add id_ed25519
    

    И теперь оба сертификата можно использовать с удостоверением. Опять же, это не лучшее решение.

  2. Создайте символические ссылки для дополнительных удостоверений, указывающих на одно и то же удостоверение, и дайте каждому свой собственный сертификат. Или скопируйте их прямо. Опять некрасиво, но должно работать.

  3. У вас может возникнуть соблазн поместить несколько сертификатов (поскольку каждая из них - одна строка) в один файл -cert.pub. В моей системе это распознает только первую строку.

  4. Обратите внимание, что если вы хотите получить дополнительное удовольствие, подписание удостоверения личности с помощью сертификата перезаписать без подтверждения существующий сертификат.

На мой взгляд, основная проблема здесь в том, что та же модель, которая работает с центрами сертификации для хостов, не работает для авторизованных пользователей. Подписание ключа хоста (при условии, что вы указываете принципала) - это утверждение аутентификация - в нем указано только то, что по этой подписи вы знаете, что ключ хоста сервера правильно его идентифицирует.

Подписание ключа пользователя также передает аутентификация, но здесь возникает дополнительная проблема разрешение - подпись CA указывает, что ключ действительно идентифицирует пользователя И что пользователю должно быть разрешено войти в систему.

Ключи хоста и ключи пользователя на самом деле не являются двойными, поскольку инициирование рукопожатия с сервером несравнимо с входом в систему (даже с ограничениями ваших возможностей) и не может рассматриваться таким образом.