Рубрики
Uncategorized

Если вы не используете сертификаты SSH, вы делаете SSH неправильно | Серия 1: Ключи против сертификатов

SSH вездесущ. Это де-факто решение для удаленного введения систем *NIX. Но у SSH есть … Tagged с DevOps, Security, OpenSource, SRE.

SSH вездесущ. Это де-факто решение для удаленного введения систем *NIX. Но у SSH есть довольно грубые проблемы, когда дело доходит до удобства использования, работы и безопасности.

Вы, вероятно, знакомы с этими проблемами:

  • Пользовательский опыт SSH ужасен. Пользователь SSH пользователь-это медленное и ручное. Подключение к новым хозяевам создает запутанные предупреждения о безопасности. У вас остаются странные новые учетные данные, чтобы управлять с небольшим руководством о том, как это сделать.
  • Работа SSH в масштабе является катастрофой. Ключевое одобрение и распространение — глупая трата времени. Имена хостов нельзя повторно использоваться. Доморощенные инструменты разбросайте ключевой материал по всему флоту, которые должны быть очищены позже, для независимых пользователей.
  • SSH поощряет плохие методы безопасности. Повторное переизведение сложно, так что это не сделано. Пользователи подвергаются воздействию ключевых материалов и рекомендуются повторно использовать ключи на разных устройствах. Ключи навсегда доверяют, поэтому ошибки проваливаются.

Хорошая новость в том, что все это легко исправить.

Ни одна из этих проблем фактически не присуща SSH. Они на самом деле проблемы с SSH Аутентификация открытого ключа . Решение состоит в том, чтобы переключиться на Аутентификация сертификата .

Аутентификация сертификата SSH делает SSH проще в использовании, проще в работе и более безопасной.

Фон

В Smallstep сертификаты — это наш варенье. Мы создаем программное обеспечение с открытым исходным кодом, которое позволяет вам запустить собственный авторитет частного сертификата и управлять сертификатами X.509 (TLS/HTTPS).

Сертификаты SSH были на нашем радаре некоторое время. С нашей точки зрения они все профессионалы, ни минусы. Но никто их не использует. Почему нет? Мы задавали сотням людей, этот вопрос. Вот что мы узнали:

  • Люди используют сертификаты SSH. На самом деле, в значительной степени все работа в масштабе, который знает, что они делают (делает ( Facebook , Uber , Google, Netflix , Intercom , Lyft , и т. Д.), Но …
  • Сертификаты и инфраструктура общедоступного ключа (PKI) трудно для Grok. Люди не сразу понимают преимущества.
  • Существует (маленький) разрыв инструментов, который усугубляет этот разрыв в знаниях. Это не сложно заполнить, но люди с осторожностью делают это сами без более глубокого понимания концепций PKI.
  • Больше всего на свете сертификаты SSH не получили прессу, которую они заслуживают. Большинство Люди, которых мы просили, вообще не слышали о них.

Мы убеждены, что сертификаты SSH — это правильный способ сделать SSH. Их не так сложно понять, и это стоит усилий. Сертификаты SSH заслуживают большего пресса и более широкого использования.

Аутентификация открытого ключа

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

Магия асимметричной криптографии — это особое соответствие между публичным и частным ключом. Вы можете знак Данные с вашим закрытым ключом, и кто -то другой может Проверьте Ваша подпись с соответствующим открытым ключом. Как и хэш, вычислительно невозможно создать подпись. Таким образом, если вы можете проверить подпись, и вы знаете, кому принадлежит личный ключ, вы знаете, кто породил подпись.

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

Это упрощение, но более или менее как работает аутентификация SSH Public Key. Аутентификация сертификата работает так же, но с важным поворотом, к которому мы доберемся через мгновение.

Для SSH хозяину, использующему аутентификацию открытого ключа, хост должен знать ваш открытый ключ. По умолчанию ваш открытый ключ должен быть добавлен в ~/.ssh/adured_keys Анкет Поддержание этого файла для каждого пользователя через флот является оперативно сложным и подверженным ошибкам.

Пользователь SSH пользователь с аутентификацией открытого ключа обычно начинается с какого -то заклинания барокко ssh-keygen Надеюсь, вытащил из бега, но, скорее всего, вылетел из переполнения стека. Затем вас попросят отправить свой открытый ключ для Утверждение и распространение Анкет Этот процесс, как правило, ручной и непрозрачный. Вас могут попросить отправить по электронной почте администратору или открыть билет JIRA. Тогда ты ждешь. Пока вы делаете это, какой -то плохой оператор прерывается и предлагается добавить ваш ключ к манифесту в некотором репо и вызвать развертывание. Как только это будет сделано, вы можете SSH. Поскольку ключевые привязки являются постоянными, ваш доступ SSH будет продолжаться на бессрочно, пока кто -то не изменит этот процесс.

Аутентификация сертификата

Аутентификация сертификата исключает одобрение и распределение ключа. Вместо того, чтобы разбросать общедоступные ключи по статическим файлам, вы связываете открытый ключ с именем с Сертификат Анкет Сертификат — это всего лишь структура данных, которая включает в себя открытый ключ, имя и вспомогательные данные, такие как дата истечения срока действия и разрешения. Структура данных подписана центр сертификации (CA).

$ ssh-keygen -L -f id_ecdsa-cert.pub
id_ecdsa-cert.pub:
        Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
        Public key: ECDSA-CERT SHA256:O6M6oIjDm5gPm1/aTY619BgC3KSpS4c3aHVWxYh/uGQ
        Signing CA: ECDSA SHA256:EY2EXJGoPv2LA6yEbjH+sf9JjG9Rd45FH1Wt/6H1k7Y
        Key ID: "mike@example.com"
        Serial: 4309995459650363134
        Valid: from 2019-09-11T14:50:01 to 2019-09-11T18:50:01
        Principals:
                mike
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

Чтобы включить аутентификацию сертификата, просто настройте клиентов и хостов, чтобы доверять любым сертификатам, подписанным общедоступным ключом вашего CA.

На каждом хосте, редактировать /etc/ssh/sshd_config , указать открытый ключ CA для проверки сертификатов пользователей, закрытого ключа хоста и сертификата хоста:

# Path to the CA public key for verifying user certificates
TrustedUserCAKeys /etc/ssh/ssh_user_key.pub

# Path to this host's private key and certificate
HostKey /etc/ssh/ssh_host_ecdsa_key
HostCertificate /etc/ssh/ssh_host_ecdsa_key-cert.pub

На каждом клиенте добавьте строку в ~/.ssh/stornal_hosts Указание CA Public Key для проверки сертификатов хоста:

@cert-authority *.example.com ecdsa-sha2-nistp256 AAAAE...=

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

Статические ключи в ~/.ssh/adured_keys больше не нужны. Вместо этого сверстники изучают общественные ключи друг от друга по требованию, когда устанавливаются соединения, обменивая сертификаты. Как только сертификаты обменялись доходы от протокола, как и с аутентификацией открытого ключа.

Чтобы узнать больше о SSH -сертификатах, посетите Сайт Smallstep Анкет Вы даже можете попробовать наше бесплатное предложение и испытать стоимость сертификатов SSH менее чем за пять минут!

Оригинал: «https://dev.to/smallstep/if-you-re-not-using-ssh-certificates-you-re-doing-ssh-wrong-episode-1-keys-versus-certificates-5a0n»