SSH – Подписание ключей типа ED25519 не работает

Вопрос или проблема

Пытаюсь настроить SSH Cert Authority, чтобы централизовать настройку новых ключей вместо изменения authorized keys на каждом из моих компьютеров. Я обнаружил кое-что очень странное – ключи, которые я создаю, работают только если ключи пользователя имеют стиль RSA и не работают с ключами стиля ED25519. Я протестировал, и сбой происходит в зависимости от типа пользовательского ключа, так что пользовательские ключи RSA могут быть подписаны как RSA, так и ED25519 стилем CA ключами, но затем удивительно, что CA ключ ED25519 может подписывать RSA ключи, которые работают, но когда тот же CA используется для подписания ключей ED25519, полученный ключ не будет работать.

ssh-keygen -t ed25519 -f userkey
ssh-keygen -s my-ssh-ca-private-key -I some-identifier userkey.pub
cat userkey userkey-cert.pub > key_with_cert

Когда я беру файл key_with_cert на новый компьютер, он работает, если и только если я уберу “-t ed25519“. Вывод из ssh -vv -i key_with_cert [email protected]:

Ключ стиля RSA, который работает

https://f000.backblazeb2.com/file/backblaze-b2-public/debug_output_rsa

Ключ стиля ED25519, использующий “-t ed25519“, который не работает

https://f000.backblazeb2.com/file/backblaze-b2-public/debug_output_ed25519

Есть идеи, почему тип ключа вызывает проблему? ED25519 существует уже довольно давно, поэтому я ожидаю схожего обращения между RSA и ECC ключами.

Чтобы замкнуть круг — это произошло потому, что я использовал Ubuntu 18.04 в то время, когда OpenSSL был версии 1.1.1 (11 сентября 2018). Похоже, у него есть ошибка при использовании ed25519 сертификационной власти для подписания ключей ed22519.

Точно такой же процесс с Ubuntu 24.04, где OpenSSL версии 3.0.13, работает идеально.

Ответ или решение

Проблема, связанная с невозможностью использования ключей ED25519 для подписания SSH сертификатов с помощью Центра сертификации (CA), — это сложная задача, с которой сталкиваются многие системные администраторы и специалисты по информационным технологиям. Давайте углубимся в анализ проблемы и возможные решения, применив методику TEA (Теория, Пример, Применение).

Теория

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

Современные операционные системы и связанные с ними программные решения, такие как OpenSSL и OpenSSH, обеспечивают поддержку разнообразных типов ключей, включая RSA и ED25519. Однако каждая комбинация ОС и программного обеспечения может обладать уникальными особенностями, связанными с реализацией поддержки тех или иных алгоритмов. В вашем случае устаревшая версия OpenSSL на Ubuntu 18.04 вызывала проблемы при подписании ключей ED25519, что, вероятнее всего, связано с недостаточной или ошибочной реализацией поддержки новых алгоритмов в старых версиях ПО.

Пример

Вы столкнулись с проблемой, когда ключи ED25519, подписанные с помощью CA, не работали, в то время как RSA ключи обрабатывались корректно. Вы использовали следующие команды для генерации и подписания ключей:

ssh-keygen -t ed25519 -f userkey
ssh-keygen -s my-ssh-ca-private-key -I some-identifier userkey.pub
cat userkey userkey-cert.pub > key_with_cert

После копирования key_with_cert на другую машину, авторизация прошла успешно только в случае использования RSA ключей, что сигнализировало о проблемах с обработкой ED25519 ключей.

Применение

Ваше дальнейшее исследование показало, что проблема заключалась в использовании устаревшей версии Ubuntu с OpenSSL 1.1.1. Эта версия имела известные проблемы с криптографическими алгоритмами, которые могут вызвать сбои в сценариях, похожих на ваш. Переход на более современную версию Ubuntu 24.04 с OpenSSL 3.0.13 разрешил проблему.

Рекомендации

  1. Обновите программное обеспечение: Используйте актуальные версии операционных систем и связанных криптографических библиотек (таких как OpenSSL) для обеспечения максимальной поддержки современных методов криптографии и устранения известных ошибок.

  2. Тестирование и отладка: При появлении неожиданных ошибок, серьезно подходите к отладчику. Используйте флаги, такие как -vv в ssh, для анализа процесса и обнаружения сбоев в аутентификации.

  3. Обратная связь и документация: Следите за официальной документацией и ченджлогами для вашего программного обеспечения. Изучение известных ошибок и их решений поможет быстрее находить и устранять проблемы.

  4. Использование виртуальных сред или контейнеров: Для тестирования различных конфигураций используйте контейнеры или виртуальные машины. Это поможет избежать изменений в основном рабочем окружении и позволит протестировать различные версии ПО без риска.

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

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

Капча загружается...